【发布时间】:2011-12-31 19:34:20
【问题描述】:
喜欢这个正则表达式吗?它匹配什么?
document.getElementById("MyElement").className =
document.getElementById("MyElement").className.replace
( /(?:^|\s)MyClass(?!\S)/ , '' )
【问题讨论】:
标签: javascript regex
喜欢这个正则表达式吗?它匹配什么?
document.getElementById("MyElement").className =
document.getElementById("MyElement").className.replace
( /(?:^|\s)MyClass(?!\S)/ , '' )
【问题讨论】:
标签: javascript regex
?: 表示将捕获组设为非捕获组,即不将其匹配项作为反向引用。当需要捕获组以使用| 运算符时,通常这样做是为了提高性能并消除反向引用。
在您的示例中,它被用于允许字符串 ^ 或空格 (\s) 开头的 或 (|)。由于这段代码的作者并不关心它匹配什么,他们将其设为非捕获组。
?! 是负前瞻。仅当捕获组不匹配时,正则表达式才会匹配。
在本例中,作者希望确保MyClass 之后的字符不是空白字符(\S)。
这段代码的作者有可能使用了单词边界 (\b)。
【讨论】:
正则表达式(?:^|\s) 是一个非捕获组,匹配行首或空白字符。
正则表达式(?!\S) 是一个否定的先行断言,它要么在字符串末尾成功,要么在下一个字符是空白字符时成功。
【讨论】: