Javascript 多次使用负前瞻(或将多个字符与^匹配)?
我想这样做:Javascript 多次使用负前瞻(或将多个字符与^匹配)?,javascript,regex,Javascript,Regex,我想这样做: /<script[^>]*>(?!<\/script>)*<\/script>/g /]*>(?!)*/g 使用javascript匹配html字符串中的所有脚本标记 我知道这行不通,但我似乎找不到任何其他解决办法。 脚本标记可以使用src属性并在()之后自行关闭,也可以包含脚本标记中的代码(..) /<script[^>]*>(?:(?!<\/script>).)*<\/script>/g
/<script[^>]*>(?!<\/script>)*<\/script>/g
/]*>(?!)*/g
使用javascript匹配html字符串中的所有脚本标记
我知道这行不通,但我似乎找不到任何其他解决办法。
脚本标记可以使用src属性并在(
)之后自行关闭,也可以包含脚本标记中的代码(..
)
/<script[^>]*>(?:(?!<\/script>).)*<\/script>/g
/]*>(?:(?!)*/g
你必须吃点东西才能吃到真正的脚本主体。这就是
在这里所做的
前瞻检查必须在每个字符之前进行,因此它被包装在一个额外的(非捕获)组中。要捕获组1中的脚本源代码,只需在(?:…)
周围添加另一组参数,就像@alanmore在注释中指出的那样。试试这个
/<script[^>]*>.*?<\/script>/g
/]*>.*
我看不出有什么理由对未来持消极态度
*?
是一个惰性匹配,因此它只匹配到下一个结束标记,而不匹配到最后一个结束标记。@Denis:不是要求的一部分。不过也没关系。从我所看到的情况来看,OP足够熟练,可以自己完成这项工作。:)更正:要捕获脚本源代码,您需要添加另一组参数:((?:(?!))*)
。如果您只是从现有组中删除了?:
-((?!))*
,您将只捕获源代码的最后一个字符。