Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式(?!)无法处理包含文字的文本\n\r?_Javascript_Regex - Fatal编程技术网

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))
  • 在NodeJS中:

    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.
    除非字符串中的
    开始
    后紧跟着
    结束
    。否则,该字符串将解析为
    开始[
    ,而不管您是使用文字序列还是换行符。