免责声明:我不建议使用正则表达式进行 html 解析......
如果脚本标签引号没有被转义(它们不应该被转义),这应该可以
=======================
原始正则表达式查找
<script(?=\s)(?=((?:[^>"']|"[^"]*"|'[^']*')*?)(?<=\s)src\s*=(?:(?>\s*(['"])\s*((?:(?!\g{-2}).)+)(?<!\.min)\.js\s*\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 )
src\s*=
(?:
(?>
\s*
2 ( ['"] )
\s*
3 (
(?:
(?! \g{-2} )
.
)+
3 )
(?<! \.min )
\.js\s*\g{-2}
)
|
(?>
(?! \s* ['"] )
\s*
4 ( [^\s>]* )
(?<! \.min )
\.js
(?= \s | > )
)
)
5 (
(?>
(?: ".*?" | '.*?' | [^>]? )+
)
5 )
)
(?>
\s+
(?: ".*?" | '.*?' | [^>]*? )+
>
)
(?<! /> )