2016-08-04 39 views
1

我有以下的html:與正則表達式的部分替換正則表達式匹配後的Jquery

<span class='token-item' style='" + token_style + "'>" + token + "</span> 

我要更換整個字符串,字符串「%」 +令牌+「%」。

到目前爲止,我得到這個:

html.replace(/<span class=\"token-item\"[^>]*(.*)</span>/g, "%" + "\1" + "%"); 

但是它不工作。有沒有辦法用正則表達式的一部分替換正則表達式?

回答

0

試試這個:

html.replace("/<span class='token-item'[^>]*?>(.*)</span>/g", "%" + "\1" + "%"); 

我做了一些細微的變化,你有什麼最初。您的原始正則表達式中使用了雙引號token-item,但您的示例使用了單引號。另外,正則表達式模式需要用雙引號。之後,我通過添加?來使字符類別[^>]*不貪婪。如果沒有這個,我擔心你的原始正則表達式會消耗所有的東西,直到最後的<span>標籤。

您可以測試這裏的正則表達式:

<span class='token-item'[^>]*?>(.*)</span> 

Regex101

0

您可以反覆搜索span元素串,率先拿到賽,然後用另一個正則表達式的比賽中獲得令牌然後用該令牌替換第一個匹配。執行此操作,直到在字符串中找不到更多的跨度元素。

<script type="text/javascript"> 
    function replaceWithToken(input) { 
     var spanEx = /<span class='token-item'[^>]*>[^<>]*<\/span>/; 
     var tokenEx = />.*</; 
     var output = input; 
     while (true) { 
      var matches = spanEx.exec(output); 

      //if no more span element found, stop 
      if (matches == null || matches.length == 0) 
       break; 

      var span = matches[0]; 
      //get the token from the match, in the form of >token< 
      var token = tokenEx.exec(span)[0]; 

      //remove the > and < and add % in front and back 
      token = '%' + token.substring(1, token.length - 1) + '%'; 

      //replace the first match with the token 
      output = output.replace(span, token); 
     } 

     return output; 
    } 
    var input = "<span class='token-item' style='token_style'>this is the first token</span>" 
     + "<br /><span class='token-item'>this is the second token</span>"; 
    var output = replaceWithToken(input); 
    console.log(input); 
    console.log(output); 
</script> 
0

你可以使用這個表達式也:/<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g

Demo and Explain

代碼示例:

token = "sampleToken"; 
 
token_style = "none;" 
 

 
html = "<span class='token-item' style='" +token_style+ "'>" + token +"</span>"; 
 
re = /<span class=\'token-item\'[^>]*?>.*?(\w+).*?<\/span>/g; 
 

 
console.log(html); 
 
console.log(html.replace(re,"%$1%"));