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

时间:2013-05-27 10:01:15

标签: javascript

如何在Javascript中忽略regexp中的换行符?

例如:

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

结果:未定义

5 个答案:

答案 0 :(得分:9)

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

然后您的RegExp会这样:

var reg = new RegExp( "\<" + "test" + "\>([\\s\\S]*?)\<\/" + "test" + "\>" );

答案 1 :(得分:7)

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

另外,将regexp更改为:

 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/

答案 2 :(得分:2)

最好使用[\s\S]代替。{用于多行匹配。

这是用于匹配包括换行符在内的所有内容的最常见的JavaScript习惯用法。与(.|\n)等基于交替的方法相比,它更容易上眼,效率更高。

答案 3 :(得分:2)

阅读本文:How to use JavaScript regex over multiple lines?

我来了,这有效:

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/

答案 4 :(得分: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> (...)