0

.jsのすべてのインスタンスを.min.jsに置き換えたいJavascriptファイルのスクリプトタグで満たされた文字列があります。文字列の内容が以下のような形式になるとは思いません。したがって、置換を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>

もう1つの考慮事項は、すでに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 に答える