正则表达式中需要插入符号(^)和美元符号($)是什么意思?

IT技术 javascript regex
2021-01-28 10:06:53

我最近阅读了有关 JavaScript 正则表达式的内容,但我很困惑。

作者说有必要在所有正则表达式声明的开头和结尾包含插入符号(^)和美元符号($)。

为什么需要它们?

5个回答

JavaScript的正则表达式()允许您指定多行模式(M),其改变的行为^$

^表示多行模式下当前行的开始,否则为字符串的开始

$表示多行模式下当前行的结束,否则为字符串的结束

例如:这允许您在下一行以“var”开头的行末尾匹配分号之类的内容 /;$\n\s*var/m

快速正则表达式还需要一个“锚”点,在某个地方开始搜索字符串中的某个位置。这些字符告诉 Regex 引擎从哪里开始查找,并且通常会减少回溯的数量,使您的 Regex在许多情况下更快

注意:这些知识来自 Nicolas Zakas 的High Performance Javascript

结论:你应该使用它们!

我有兴趣阅读一本关于数据结构的书,在看到您的网站后,我得出结论,我可以阅读“算法设计手册”:) ;)
2021-03-23 10:06:53
不客气,顺便说一句,我强烈建议您阅读 Zakas 的书:)
2021-04-03 10:06:53
@蚂蚁这意味着匹配多行字符串的每一行分开-检查出来的regexpal.com
2021-04-04 10:06:53
多行模式是什么意思?
2021-04-13 10:06:53
是的,感谢您的回答;) 主要是因为使用锚点将有助于正则表达式引擎;) 谢谢;)
2021-04-14 10:06:53

^ 表示输入字符串的开始。

$ 代表结束。

您实际上不必在开始和结束时使用它们。您可以在任何地方使用 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


如果你通知我上面或这个错误(或奇怪)的句子,我会感谢你。