JavaScript正则表达式中像?:和?!这样的问号代表什么意思?

5

这里的正则表达式是什么?它匹配什么?

document.getElementById("MyElement").className = 
   document.getElementById("MyElement").className.replace
  ( /(?:^|\s)MyClass(?!\S)/ , '' )
2个回答

4

?: 表示将捕获组转换为非捕获组,即不将其匹配结果作为后向引用。这通常是为了提高性能和简化后向引用,当需要使用 | 运算符时,才会使用捕获组。

在您的示例中,它被用于允许字符串开头 ^ 或空格 (\s) 的 (|)。由于代码作者不关心所匹配的内容,因此他们将其设置为非捕获组。

?! 是负向先行断言。只有当捕获组不匹配时,正则表达式才会匹配。

在此示例中,作者希望确保 MyClass 后面的字符不是空白字符 (\S)。

代码作者也可以使用单词边界 (\b) 来实现相同的效果。


基本上,该正则表达式的含义是匹配单词 word "MyClass" 任何位置,而不是单词的一部分(不匹配"MyClassExt" 或者 "ThisIsMyClass"等)。 - Ivan Nevostruev
JS正则表达式和其他语言(如Perl或PHP)的正则表达式之间的主要区别是什么?我在www.w3schools.com提供的教程中没有找到“?:”和捕获组的内容。 - trunpet
1
@trunpet:你应该避免使用w3schools作为资源。它已经过时,充满错误和错误的建议。 - alex

1

正则表达式(?:^|\s)是一个非捕获组,它匹配行的开头或空格字符。

正则表达式(?!\S)是一个负向先行断言,它在字符串末尾或下一个字符为空格字符时成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接