正则表达式查找然后替换所有实例



我有一个字符串,里面装满了 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+
          (?: ".*?" | '.*?' | [^>]*? )+
          >
     )
     (?<! /> )

最新更新