0

我有一个用 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。

4

1 回答 1

0

免责声明:我不建议使用正则表达式进行 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+
          (?: ".*?" | '.*?' | [^>]*? )+
          >
     )
     (?<! /> )
于 2012-07-02T18:34:02.520 回答