我有一个字符串,里面装满了 Javascript 文件的脚本标签,我想用 .min.js 替换所有.js实例。我不能假设字符串的内容将采用如下所示的相同格式。所以我需要将替换限制在 src= 部分内。
我假设正则表达式最适合此,但是我将如何进行查找,然后替换所有实例?
<script type="text/javascript" src="../../Scripts/json.js"></script><script type="text/javascript" src="../../Scripts/Logger.js"></script> <script type="text/javascript" src="../../Scripts/PageHelper.js"></script>
另一个考虑因素是我不想替换 .min.js因为它已经定义为 min.js。
免责声明:我不建议使用 regex 进行 html 解析...
如果脚本标签引号没有转义(它们不应该转义),这应该可以工作
====
=================原始正则表达式查找
<script(?=s)(?=((?:[^>"']|"[^"]*"|'[^']*')*?)(?<=s)srcs*=(?:(?>s*(['"])s*((?:(?!g{-2}).)+)(?<!.min).jss*g{-2})|(?>(?!s*['"])s*([^s>]*)(?<!.min).js(?=s|>)))((?>(?:".*?"|'.*?'|[^>]?)+)))(?>s+(?:".*?"|'.*?'|[^>]*?)+>)(?<!/>)
原始替换
<script$1src="$3$4.min.js"$5>
修饰符 's',单行(表示全部点)
扩展正则表达式
<script
(?=s)
(?=
( (?: [^>"']|"[^"]*"|'[^']*')*? ) (?<=s) # (1) - before 'src'
src s*=
(?:
(?> s* (['"]) s* ((?:(?!g{-2}).)+ ) (?<!.min).js s* g{-2} ) # (2,3)
| (?> (?!s*['"]) s* ([^s>]*) (?<!.min).js (?=s|>) ) # (4) - use $3.$4
)
( (?> (?:".*?"|'.*?'|[^>]?)+ ) ) # (5) - after 'src'
)
(?> s+ (?:".*?"|'.*?'|[^>]*?)+
>
) (?<! /> )
或。。。
<script
(?= s )
(?=
1 (
(?: [^>"'] | " [^"]* " | ' [^']* ' )*?
1 )
(?<= s )
srcs*=
(?:
(?>
s*
2 ( ['"] )
s*
3 (
(?:
(?! g{-2} )
.
)+
3 )
(?<! .min )
.jss*g{-2}
)
|
(?>
(?! s* ['"] )
s*
4 ( [^s>]* )
(?<! .min )
.js
(?= s | > )
)
)
5 (
(?>
(?: ".*?" | '.*?' | [^>]? )+
)
5 )
)
(?>
s+
(?: ".*?" | '.*?' | [^>]*? )+
>
)
(?<! /> )