【问题标题】:JS RegEx to match all characters (including newline) between two strings but without the two strings?JS RegEx 匹配两个字符串之间的所有字符(包括换行符)但没有两个字符串?
【发布时间】:2014-04-27 04:43:13
【问题描述】:

示例文字:

<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]);

==>

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

在线示例

http://regex101.com/r/rF7jR9

问题

如果还有\n和\r重发的话,什么Java Script的正则表达式可以传递分隔字符串之间的字符。如果从交付的字符串中删除 \n 和 \r 那就太好了。 RegExpr 应该可以快速运行。

【问题讨论】:

  • 为什么使用正则表达式?在此示例中,您有具有已知 ID 的对象“div”。您可以使用 getElementById('wanted').innerHTML 来获取内容。
  • 如果示例文本在strg 中。如何使用它? var txt = strg.getElementById('wanted').innerHTML 不工作。

标签: javascript regex newline delimiter


【解决方案1】:

现在我知道如何:

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

感谢 Jerry 的 (group) 提示。 [\s\S] 代表每个字符。 *?第一次找到后停止&lt;\/div&gt;。

【讨论】:

  • 太好了,谢谢 - 对于在重构时查找全部以特定字符串开头的 cmets 块非常有用,因为在我的情况下,我当然不想到处删除所有 cmets!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2020-11-13
    • 2019-11-20
    • 2012-11-06
    • 2016-09-18
    • 2014-08-05
    相关资源
    最近更新 更多