2013-02-11 119 views
1

我正在尋找一個單線程正則表達式,該表達式應將所有雙引號轉換爲括號內存在的單引號。RegEx將所有雙引號替換爲括號中的單引號

例:

<span onclick="javascript:myfunction("param(s)1", "param(s)2")"

我想上面的一個轉換爲

<span onclick="javascript:myfunction('param(s)1', 'param(s)2')"

我在正則表達式的新手。請幫忙!

+3

因爲括號可以嵌套,所以你不能在正則表達式中這樣做。 – SLaks 2013-02-11 16:27:41

+0

你將不得不編寫自己的解析器。正則表達式只能解析正則語言。處理託槽平衡不夠好。 – 2013-02-11 16:29:43

+0

您應該替換或轉義它們_before_內容呈現爲雙引號('=「」')。我假設你使用了一些服務器端腳本。 – marekful 2013-02-11 16:30:00

回答

-1

這似乎是你真的想取代雙引號,那這裏面的雙引號:

function replace_inside_quotes(str) { 
    var regex_quotes = /"(.*)"(.*)"(.*)"/; 
    while(regex_quotes.test(str)) { 
    str = str.replace(regex_quotes, '"$1\'$2\'$3"'); 
    } 
    return str; 
} 
+0

這會如果字符串變得太長,會有很大的性能問題。請參閱:http://www.regular-expressions.info/catastrophic.html – 2013-02-11 17:10:29

0

一個功能,將做到這一點:

function replaceQuotes(inputString) 
{ 
    var output = ''; 
    var inbrackets = 0; 
    for (i = 0; i < inputString.length; i++) 
    { 
     var currentChar = inputString.charAt(i); 
     switch (currentChar) 
     { 
      case '\"': 
       if (inbrackets > 0) 
        output += '\''; 
       else 
        output += '\"'; 
       break; 

      case '(': 
       inbrackets++; 
       output += '('; 
       break; 

      case ')': 
       inbrackets--; 
       output += ')'; 
       break; 

      default: 
       output += currentChar; 
       break; 
     } 
    } 
    return output; 

} 

如果你是想過程完整的HTML你會遇到比這更精緻的東西。

相關問題