16

如何在 Javascript 中忽略正则表达式中的换行符?

例如:

 data = "\
    <test>11\n
    1</test>\n\
    #EXTM3U\n\
 "
 var reg = new RegExp( "\<" + "test" + "\>(.*?)\<\/" + "test" + "\>" )
 var match = data.match(reg)
 console.log(match[1])

结果:未定义

4

5 回答 5

13

在 JavaScript 中,没有标志告诉RegExp().应该匹配换行符。因此,您需要使用一种解决方法,例如[\s\S].

您的 RegExp 将如下所示:

var reg = new RegExp( "\<" + "test" + "\>([\s\S]*?)\<\/" + "test" + "\>" );
于 2013-05-27T10:12:00.327 回答
12

\您在第 2 行末尾缺少一个 JS 换行符。

另外,将正则表达式更改为:

 var data = "\
    <test>11\n\
    1</test>\n\
    #EXTM3U\n\
 ";
 var reg = new RegExp(/<test>(.|\s)*<\/test>/);
 var match = data.match(reg);
 console.log(match[0]);

http://jsfiddle.net/samliew/DPc2E/

于 2013-05-27T10:12:59.267 回答
3

通过阅读这篇文章:如何在多行上使用 JavaScript 正则表达式?

我来了,它有效:

var data = "<test>11\n1</test>\n#EXTM3U\n";
reg = /<test>([\s\S]*?)<\/test>/;
var match = data.match(reg);
console.log(match[1]);

这是一个小提琴:http: //jsfiddle.net/Rpkj2/

于 2013-05-27T10:21:07.610 回答
2

更好的是你可以使用[\s\S]而不是 . 用于多行匹配。

它是最常见的 JavaScript 习惯用法,用于匹配包括换行符在内的所有内容。它比基于交替的方法(如(.|\n).

于 2013-05-27T10:12:39.907 回答
0

编辑:明白了:

我试图在记事本++中使用这个正则表达式但问题是它从头到尾找到整个文本

我的正则表达式:

<hostname-validation>(.|\s)*<\/pathname-validation> (finds everything)
/<hostname-validation>(.|\s)*<\/pathname-validation>/ (finds nothing)
/\<hostname-validation\>([\s\S]*?)\<\/pathname-validation\>/ (finds nothing)
**<hostname-validation>([\s\S]*?)<\/pathname-validation> (my desired result)**

我在其中使用的文本:

<hostname-validation>www.your-tag-name.com</hostname-validation>
          <pathname-validation>pathname</pathname-validation>   <response-validation nil="true"/>
          <validate-absence type="boolean">false</validate-absence> (...) <hostname-validation>www.your-tag-name.com</hostname-validation>
          <pathname-validation>pathname</pathname-validation>   <response-validation nil="false"/>
          <validate-absence type="boolean">false</validate-absence> (...) <hostname-validation>www.your-tag-name.com</hostname-validation>
          <pathname-validation>pathname</pathname-validation>   <response-validation nil="true"/>
          <validate-absence type="boolean">false</validate-absence> (...)
于 2021-06-25T09:49:57.833 回答