这个问题是什么样的?:和?!在Javascript regexp中意味着什么?

时间:2011-11-17 23:01:07

标签: javascript regex

就像这个中的正则表达式一样?它匹配什么?

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

3 个答案:

答案 0 :(得分:2)

?:表示将捕获组设为非捕获组,即不将其匹配作为反向引用。当需要使用捕获组来使用|运算符时,通常会这样做以提高性能并消除后向引用的混乱。

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

?!是负面的预测。只有捕获组不匹配时,正则表达式才会匹配。

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

此代码的作者可能会使用单词边界(\b)。

答案 1 :(得分:1)

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

正则表达式(?!\S)是一个负前瞻断言,它在字符串的结尾处成功,或者当下一个字符是空白字符时成功。

答案 2 :(得分:0)

我建议您查看Mozilla的Javascript Regex reference