JS RegEx匹配两个字符串之间但没有两个字符串的所有字符(包括换行符)?

时间:2014-03-20 11:16:05

标签: javascript regex newline delimiter

示例文本:

<div id="not-wanted">
no no 
no 
</div>
<div id="wanted">I want 
only this 
text
</div> no no no
no no
<div id="not-wanted">
no no no 
</div>
<div id="wanted">no no
no no</div>
<div id="wanted">
no no     
</div>

应该提供:

I want 
only this 
text

或更好:

I want only this text

不幸的是,我的解决方案也捕获了2个定界字符串:

$('#put').append(/<div id="wanted">[^<>]*<\/div>/.exec(strg)[0]);

==&GT;

<div id="wanted">I want 
only this 
text
</div>

在线示例

http://regex101.com/r/rF7jR9     

问题

如果还有\n\r重新发送,Java Script的正则表达式可以在分隔字符串之间传递字符。如果从传递的字符串中删除\n\r,那就太好了。 RegExpr应该可以快速工作。

2 个答案:

答案 0 :(得分:9)

现在我知道如何:

$('#put').append(/<div id="wanted">([\s\S]*?)<\/div>/.exec(strg)[1]);

感谢Jerry提出的(群组)提示。 [\s\S]代表每个角色。 *?首次找到<\/div>后停止。

答案 1 :(得分:1)

您可以使用捕获组并忽略完整匹配吗?

$('#put').append(/<div id="wanted">([^<>]*)<\/div>/.exec(strg)[1]);
                                   ^------^                    ^

( ... )是一个捕获组,因为它是正则表达式中的第一个,它会到达第一个捕获组,因此接近结尾的1