正则表达式中的(\ /?)的含义是(\ w +)([^>]*?)冗余?

125*_*748 7 javascript regex

我认为这个正则表达式应该匹配一个html开始标记.

var results = html.match(/<(\/?)(\w+)([^>]*?)>/);

我看它应该首先抓住它<,但后来我很困惑这次捕获(\/?)完成了什么.我是否正确地推断([^>]*?)>除了>> = 0次之外每个字符的搜索?如果是这样,为什么(\w+)捕获必要?不属于它的范围[^>]*?

jba*_*bey 4

逐个令牌地获取它:

  • /开始正则表达式文字
  • <匹配文字<
  • (\/?)匹配 0 或 1 ( ?) 文字/,由转义\
  • (\w+)匹配一个或多个“单词字符”
  • ([^>]*?)惰性* 匹配零个或多个 ( *?) 任何非>
  • >匹配文字>
  • /结束正则表达式文字

懒洋洋地* - 添加“?” 在重复量词之后将使其延迟执行,这意味着正则表达式将匹配前面的标记最少次数。请参阅文档

因此,本质上,此正则表达式将匹配“<”,可能后跟“/”,后跟任意数量的字母、数字或下划线,后跟任何不是“>”的内容,最后后跟“>” 。

话虽如此,令牌(\w+)并不是多余的,因为它确保<和之间至少有一个单词字符>

请注意,尝试使用正则表达式解析 HTML 通常不是一个好主意