【问题标题】:RegEx to replace all the double quotes to single quotes in side parenthesis正则表达式将括号内的所有双引号替换为单引号
【发布时间】:2013-02-12 01:40:03
【问题描述】:

我正在寻找一个单行正则表达式,它应该将所有双引号转换为括号内的单引号。

例如:

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

我想把上面的转换成

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

我是正则表达式的新手。请帮忙!

【问题讨论】:

  • 因为括号可以嵌套,所以不能在正则表达式中这样做。
  • 您必须编写自己的解析器。正则表达式只能解析常规语言。处理括号的平衡是不够的。
  • 您应该替换或转义它们之前内容被呈现为双引号(="")。我假设你使用了一些服务器端脚本。
  • OP 应该能够用正则表达式解决这个问题,因为他不关心嵌套,只关心它是否在任何括号内。类似于以下 Perl 表达式的东西,虽然丑陋,但我认为会起作用: s/((.*)\"(.*))/\1'\2/g 。我不知道足够的 JavaScript 将其呈现为实际答案。
  • 澄清一下——我并不是说你/应该/以这种方式解决它,我同意@MarcellFülöp 和其他人的观点,即提出这个问题可能意味着你正在走一条道路从长远来看,让你的生活更艰难。但是,从技术上讲,我认为你/可以/。

标签: javascript regex


【解决方案1】:

执行此操作的函数是:

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,您将需要比这更复杂的东西。

【讨论】:

    【解决方案2】:

    看来你是真想把双引号里面的双引号换掉,这样呢:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2020-10-10
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多