JavaScript正则表达式(?!)无法处理包含文字的文本\n\r?
我正在尝试匹配包含JavaScript正则表达式(?!)无法处理包含文字的文本\n\r?,javascript,regex,Javascript,Regex,我正在尝试匹配包含\n\r的文本中的某些字符: `start[\n\r]other words end other words`.match(/start(?!end)./) 期望: start[\n\r]other words 但是得到: start[ 问题是什么,为什么我会得到这个错误结果 提前谢谢 这与新行无关。忽略前瞻,您的正则表达式只要求匹配单词start和一个附加字符/start./,因此这正是您得到的结果。您真正想要的是匹配开始和所有事情,包括但不包括结束。您可以通过sta
\n\r
的文本中的某些字符:
`start[\n\r]other words end other words`.match(/start(?!end)./)
期望:
start[\n\r]other words
但是得到:
start[
问题是什么,为什么我会得到这个错误结果
提前谢谢 这与新行无关。忽略前瞻,您的正则表达式只要求匹配单词
start
和一个附加字符/start./
,因此这正是您得到的结果。您真正想要的是匹配开始
和所有事情,包括但不包括结束
。您可以通过start.*?(?=end)
来实现这一点,您似乎想要匹配
结束
,或end
(因此上面少了一个字符(1))console.log(`start[\n\r]other words end other words`.match(/(start.*?)end/s)[1])
//=>“开始[\n\r]其他单词”
console.log(`start[\n\r]其他单词end其他单词`.match(/(start.*?.end/s)[1])
//=>'开始[\n\r]换句话说,
它不是一个字面的\n\r
-它被解释为一个新行。因此,即使你有字面的新行,正则表达式也会给你同样的结果。你要寻找精确的匹配start
,后面没有精确的匹配end
,然后得到下一个字符。因此,匹配start.
除非字符串中的开始
后紧跟着结束
。否则,该字符串将解析为开始[
,而不管您是使用文字序列还是换行符。