它应该非常简单,但是我不知道如何匹配多行字符串的开头和结尾。说,我想知道字符串是否在第一行的开头包含foo
。
str = "foo\nbar";
reg = /^foo/m;
console.log( reg.test( str ) ); // → true
但是如果我交换foo
和bar
,从而将foo
放在第二行,结果(尽管不应该)是相同的:
str = "bar\nfoo";
reg = /^foo/m;
console.log( reg.test( str ) ); // → true
那么,有没有办法捕获多行字符串的开始和结束?
答案 0 :(得分:4)
您正在使用多行模式标志“ m”。 使用该标志,您不仅可以在文本的开头进行匹配,而且可以在行的开头进行匹配。因此,当您在foo之前有换行符\ n时,这是新行的开始,它将与开始查询^ foo匹配。
这里是带有更多信息的链接: https://javascript.info/regexp-multiline-mode
解决方案:,正如Jacob在下面的评论部分中所述,如果只希望匹配字符串的开头,只需采用多行模式,
str = "bar\nfoo";
reg = /^foo/;
console.log( reg.test( str ) ); // → false
答案 1 :(得分:0)
在这种情况下,您可能根本不需要使用复杂的正则表达式。如果始终确定要检查字符串的非常开头是否为“ foo”,请检查str.slice(0,3) === "foo"
。