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

19

如何在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])

结果:未定义


5个回答

20

在JavaScript中,没有标记可以告诉RegExp().匹配换行符。所以,你需要使用一个变通方法,例如[\s\S]

你的RegExp将会像这样:

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

13

你在第二行缺少一个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/


6

可以确认这个有效。 - Zenahr

3

更好的方法是使用[\s\S]而不是.来进行多行匹配。

这是最常用的JavaScript习语,可匹配包括换行符在内的所有内容。它比基于交替的方法(如(.|\n))更易于阅读,并且更加高效。


0

编辑:搞定了:

我试图在Notepad++中使用这个正则表达式,但问题是它会从开头到结尾找到整个文本。

我的正则表达式:

<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> (...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接