JS中的正则expression式中需要使用caret(^)和dollar符号($)吗?
我最近读了Java Script正则expression式,但是我感到困惑。
我的作者说在所有正则expression式声明的开头和结尾必须包含脱字符( ^
)和美元符号( $
)? 为什么这实际上需要? 它的目的是什么?
纠正我,如果错了!
Javascript RegExp()允许你指定一个多行模式(m),它改变^
和$
的行为。
^
表示多行模式下当前行的开始,否则表示string的开始
$
表示多行模式下当前行的结束,否则表示string结束
例如:这允许你在下一行以“var” /;$\n\s*var/m
开始的一行尾部匹配类似分号的东西
快速regexen也需要一个“锚点”,在某个地方开始它的searchstring的某处。 这些字符告诉正则expression式引擎从哪里开始寻找,并且通常减less回溯的次数,使得正则expression式在很多情况下要快得多 。
注意:这些知识来自Nicolas Zakas的高性能Javascript
结论: 你应该使用它们!
^
代表inputstring的开始。
$
表示结束。
你不必在开始和结束时使用它们。 你可以在任何地方使用em =)正则expression式很有趣(和令人困惑)。 他们不代表一个人物。 他们代表着开始和结束。
这是一个非常好的网站
它们匹配string( ^
)的开头和string('$')的结尾。
在string的开头或结尾匹配string时,应该使用它们。 但是,我不会说你必须使用它们。
^
在testingstring的开始处锚定RE的开始,并且$
在testingstring的结尾处锚定RE的结尾。 如果这就是你想要的,去吧! 但是,如果您使用forms为^.*theRealRE.*$
RE,那么您可能需要考虑放弃锚点,并仅使用RE的核心。
有些语言强制RE在默认情况下被锚定在两端。
我已经testing过这些。
1. / ^ a /匹配abb,ab但不是ba,bab,bba。
2. / a /匹配abb,ab和ba,bab,bba。
我认为/ ^ a /匹配这样的string开始一个。
/ a /匹配这样的string包含一个。
类似于/ ^ a /,/ a $ /匹配ba,a,但不是ab,bab。
请参阅http://www.regular-expressions.info/anchors.html 。
如果你通知上面或这个对我来说错误(或奇怪)的句子,我会感谢你。