【发布时间】:2011-08-20 18:31:13
【问题描述】:
我最近阅读了有关 JavaScript 正则表达式的内容,但我很困惑。
作者说必须在所有正则表达式声明的开头和结尾包含插入符号(^)和美元符号($)。
为什么需要它们?
【问题讨论】:
标签: javascript regex
我最近阅读了有关 JavaScript 正则表达式的内容,但我很困惑。
作者说必须在所有正则表达式声明的开头和结尾包含插入符号(^)和美元符号($)。
为什么需要它们?
【问题讨论】:
标签: javascript regex
我已经测试过这些。
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。
如果您将上面的错误(或奇怪)句子或这个通知我,我会感谢您。
【讨论】:
Javascript RegExp() 允许你指定一个多行模式 (m) 来改变^ 和$ 的行为。
^表示多行模式下当前行的开始,否则为字符串的开始
$表示多行模式下当前行结束,否则为字符串结束
例如:这允许您在下一行以 "var" /;$\n\s*var/m 开头的行的末尾匹配分号之类的东西
快速正则表达式还需要一个“锚”点,在某处开始搜索字符串中的某处。这些字符告诉 Regex 引擎从哪里开始查找,并且通常会减少回溯的数量,从而使您的 Regex 在许多情况下快得多。
注意:此知识来自 Nicolas Zakas 的High Performance Javascript
结论:你应该使用它们!
【讨论】:
^ 将 RE 的开头锚定在测试字符串的开头,$ 将 RE 的结尾锚定在测试字符串的末尾。如果这就是你想要的,那就去吧!但是,如果您使用的是 ^.*theRealRE.*$ 形式的 RE,那么您可能需要考虑放弃锚点并仅使用 RE 的核心。
默认情况下,某些语言强制 RE 锚定在两端。
【讨论】:
它们匹配字符串的开头 (^) 和字符串的结尾 ('$')。
在字符串的开头或结尾匹配字符串时应该使用它们。但是,我不会说您必须使用它们。
【讨论】:
^表示输入字符串的开始。
$代表结束。
您实际上不必在开始和结束时使用它们。您可以在任何地方使用 em =) 正则表达式很有趣(而且令人困惑)。它们不代表一个字符。它们代表开始和结束。
【讨论】: