我最近阅读了有关 JavaScript 正则表达式的内容,但我很困惑。
作者说有必要在所有正则表达式声明的开头和结尾包含插入符号(^
)和美元符号($
)。
为什么需要它们?
我最近阅读了有关 JavaScript 正则表达式的内容,但我很困惑。
作者说有必要在所有正则表达式声明的开头和结尾包含插入符号(^
)和美元符号($
)。
为什么需要它们?
JavaScript的正则表达式()允许您指定多行模式(M),其改变的行为^
和$
。
^
表示多行模式下当前行的开始,否则为字符串的开始
$
表示多行模式下当前行的结束,否则为字符串的结束
例如:这允许您在下一行以“var”开头的行末尾匹配分号之类的内容 /;$\n\s*var/m
快速正则表达式还需要一个“锚”点,在某个地方开始搜索字符串中的某个位置。这些字符告诉 Regex 引擎从哪里开始查找,并且通常会减少回溯的数量,使您的 Regex在许多情况下更快。
注意:这些知识来自 Nicolas Zakas 的High Performance Javascript
结论:你应该使用它们!
^
表示输入字符串的开始。
$
代表结束。
您实际上不必在开始和结束时使用它们。您可以在任何地方使用 em =) 正则表达式很有趣(而且令人困惑)。它们不代表一个字符。他们代表开始和结束。
它们匹配字符串的开头 ( ^
) 和字符串的结尾 ('$')。
您应该在匹配字符串开头或结尾的字符串时使用它们。但是,我不会说您必须使用它们。
^
将 RE 的开头锚定在测试字符串的开头,并将 RE$
的结尾锚定在测试字符串的末尾。如果这就是你想要的,那就去吧!但是,如果您正在使用这种形式的 RE,^.*theRealRE.*$
那么您可能需要考虑删除锚点并仅使用 RE 的核心本身。
默认情况下,某些语言强制 RE 锚定在两端。
我已经测试了这些。
1. /^a/ 匹配 abb, ab 但不匹配 ba, bab, bba。
2. /a/ 匹配 abb, ab 和 ba, bab, bba。
我认为 /^a/ 匹配这样的字符串,以 a 开头。
/a/ 匹配包含 a 的此类字符串。
与 /^a/ 类似,/a$/ 匹配 ba, a,但不匹配 ab, bab。
请参阅http://www.regular-expressions.info/anchors.html。
如果你通知我上面或这个错误(或奇怪)的句子,我会感谢你。