正则表达式仅在某些字符跟随字符串时匹配

时间:2017-06-01 14:46:27

标签: javascript regex

我需要找到一个包含&#34; script&#34;的字符串。在<>之前或之后包含多个字符。我可以这样做:<*script.*>

我也希望仅在该字符串后跟<后才匹配 到目前为止,我最接近的是:(<*script.*>)([^=?<*]*)$

但是,<script></script>之类的内容会失败,因为上一个>后面没有<(所以它不匹配)。

如何检查第一个>是否后跟<

例如, <script> abc () ; </script>匹配

<< ScriPT >abc (”XXX”);//<</ ScriPT > MATCH

<script></script> DON&#39; T MATCH

并且,我仍在努力的案例: <script/script>不要匹配

谢谢!

3 个答案:

答案 0 :(得分:2)

你和你的正则表达式很接近。你只需要使用一个非贪婪的第一个查询?在第二个*之后。试试这个:

(?i)<*\s*script.*?>[^<]+<*[^>]+>

有一个名为Expresso的应用程序真正有助于设计Regex字符串。试一试。

说明:没有?非贪婪的论点,你的第二个*在第一个&gt;之前使搜索一直到字符串的末尾并抓住&gt;在那一点的最后。查询中的其他任何内容都没有被查看。

编辑:在开头添加(?i)不区分大小写。如果你想要一个javascript特定的不区分大小写的正则表达式,你会这样做:

/<*\s*script.*?>[^<]+<*[^>]+>/i

我注意到你的正则表达式中有一个括号来组成小组,但你没有具体说你试图捕捉小组。您想要捕捉<script></script>之间的内容吗?如果是这样,那将是:

/<*\s*script.*?>([^<]+)<*[^>]+>/i

答案 1 :(得分:1)

如果我理解你要找的东西试一试:

regex = "<\s*script\s*>([^<]+)<"

这是Python中的一个例子:

import re

textlist = ["<script>show this</script>","<script></script>"]

regex = "<\s*script\s*>([^<]+)"

for text in textlist:
    thematch = re.search(regex, text, re.IGNORECASE)
    if thematch:
        print ("match found:")
        print (thematch.group(1))
    else:
        print ("no match sir!")

说明: 以&lt;开始然后可能的空格,单词脚本,可能的空格,&gt; 然后捕获所有(至少1)非&lt;并确保后跟一个&lt;

希望有所帮助!

答案 2 :(得分:-1)

使用substring()和/或indexOf()可以更好地解决这个问题  JavaScript方法