JS正则表达式匹配两个字符串之间的所有字符(包括换行符),但不包括这两个字符串本身?

3

Example Text:

<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

很不幸,我的解决方案也捕捉到了这两个分隔符:

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

==>

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

在线示例

http://regex101.com/r/rF7jR9

问题

如何使用Java Script的正则表达式提取定界字符串之间的字符,并删除其中的\n\r。希望正则表达式的处理速度较快。


3
为什么要使用正则表达式?在这个例子中,有一个已知ID的"div"对象。您可以使用getElementById('wanted').innerHTML获取内容。 - Guy Dafny
如果示例文本在 strg 中。如何使用它?var txt = strg.getElementById('wanted').innerHTML 不起作用。 - Inherent
2个回答

11

现在我知道如何:

$('#put').append(/<div id="wanted">([\s\S]*?)<\/div>/.exec(strg)[1]);
感谢Jerry提供的"(组)"提示。 "[\s\S]"代表匹配任何字符。"*?"在找到第一个"<\/div>"后停止。

非常好,谢谢 - 在重构时非常有用,可以找到所有以特定字符串开头的注释块,因为在我的情况下,我肯定不想删除所有的注释! - GrayedFox

1
您可以使用捕获组并忽略完整匹配吗?
$('#put').append(/<div id="wanted">([^<>]*)<\/div>/.exec(strg)[1]);
                                   ^------^                    ^

( ... ) 是一个捕获组,由于它是正则表达式中的第一个捕获组,因此它成为第一个捕获组,因此在末尾附近有 1


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