2013-02-11 78 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你会遇到比这更精致的东西。

相关问题