簡體   English   中英

查找正則表達式,然后替換所有實例

[英]Regex find then replace for all instances

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

免責聲明:我不建議將正則表達式用於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+
          (?: ".*?" | '.*?' | [^>]*? )+
          >
     )
     (?<! /> )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM