我需要找到一个包含&#34; script&#34;的字符串。在<
和>
之前或之后包含多个字符。我可以这样做:<*script.*>
我也希望仅在该字符串后跟<
后才匹配
到目前为止,我最接近的是:(<*script.*>)([^=?<*]*)$
但是,<script></script>
之类的内容会失败,因为上一个>
后面没有<
(所以它不匹配)。
如何检查第一个>
是否后跟<
?
例如,
<script> abc () ; </script>
匹配
<< ScriPT >abc (”XXX”);//<</ ScriPT >
MATCH
<script></script>
DON&#39; T MATCH
并且,我仍在努力的案例:
<script/script>
不要匹配
谢谢!
答案 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方法