RegEx只有在特定HTML元素中出现时才匹配字符串

RegEx只有在特定HTML元素中出现时才匹配字符串,第1张

概述我试图在Visual Studio 2013项目中找到某些代码部分.我正在使用RegEx搜索功能(我在“搜索选项”下选中“使用正则表达式”). 更具体地说,我正在尝试找到位于开始和结束脚本标记之间的字符串“findthis”(不带引号). RegEx应该能够匹配字符串多行. 例: <html> <head> <script> var x = 1; 我试图在Visual Studio 2013项目中找到某些代码部分.我正在使用RegEx搜索功能(我在“搜索选项”下选中“使用正则表达式”).

更具体地说,我正在尝试找到位于开始和结束脚本标记之间的字符串“findthis”(不带引号). RegEx应该能够匹配字符串多行.

例:

<HTML>    <head>        <script>            var x = 1;            if (x < 1) {                x = 100;            }            var y = 'findthis'; // Should be matched        </script>    </head>    <body>        <script>            var a = 2;        </script>        <h1>Welcome!</h1>        <p>This findthis here should not be matched.</p>        <script>            var b = 'findthis too'; // Should be matched,too.        </script>        <div>            <p>This findthis should not be matched neither.</p>        </div>    </body></HTML>

到目前为止我尝试的是以下((?s)启用多行):

(?s)\<script\>.*?(findthis).*?\</script\>

这里的问题是,当脚本结束标记出现时,它不会停止搜索“findthis”.这就是为什么在Visual Studio 2013中,它还会在搜索结果中的正文开头标记之后显示脚本元素.

任何人都可以帮助我摆脱这个RegEx地狱吗?

解决方法 您可以使用此正则表达式来避免匹配< script>标签:

<script>((?!</?script>).)*(findthis)((?!</?script>).)*</script>

或者,更有效的原子分组:

<script>(?>(?!</?script>).)*(findthis)(?>(?!</?script>).)*</script>

我假设我们不想既不打开也不打算关闭< script>之间的标签,所以,我正在使用/? insIDe(?>(?!< /?script>).)*,只是为了避免任何其他格式错误的代码.我再次(findthis)之后重复它,以便我们只匹配未跟随< script>的字符.或< / script>.

在Expresso中进行了测试,略微修改了输入(我在任何地方添加<和>来模拟损坏):

总结

以上是内存溢出为你收集整理的RegEx只有在特定HTML元素中出现时才匹配字符串全部内容,希望文章能够帮你解决RegEx只有在特定HTML元素中出现时才匹配字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1082870.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存