仅在子字符串中优雅而强大的字符替换

时间:2014-08-29 16:06:48

标签: javascript regex string

我正在寻找一种优雅而强大的方法来替换" "

之间包含的字符

替换为:, 变为 . 如果包含在 " "中。 E.g我有这个字符串:

  

红色的狐狸跳过了懒惰的狗#34;

我希望这成为

  

红色,狐狸跳过" lazy.dog"

我知道replace()是一个本机JS函数,可以替换字符串中的字符,但我对如何实现上述内容感到困惑。

我目前唯一能想到的方法是有点复杂,它涉及一个FOR循环来迭代字符串和IF/ELSE's.

实现这一目标的优雅和稳健方法是什么?

4 个答案:

答案 0 :(得分:2)

您可以使用回调。

var r = 'The red, fox jumps over the "lazy,dog"'.replace(/"[^"]+"/g, function(v) { 
      return v.replace(/,/g, '.');
}); // The red, fox jumps over the "lazy.dog"

答案 1 :(得分:1)

您可以尝试使用以下正则表达式(使用negative lookahead )将,内的"替换为.

> 'The red, fox jumps over the "lazy,dog" foo,bar foo "bar,foo" "lazy,dog" ,foo'.replace(/,(?!(?:[^"]*"[^"]*")*[^"]*$)/g, ".");
'The red, fox jumps over the "lazy.dog" foo,bar foo "bar.foo" "lazy.dog" ,foo'

答案 2 :(得分:1)

console.log('  hello, ",  sdad, "  '.replace(/".+?"/g,function(e){return e.replace(/\,/g,".")}))

答案 3 :(得分:0)

试试这个:

var regex = /".*"/,
    text = 'The red, fox jumps over the "lazy,dog"';

    console.log(text.replace(regex, function(match) { return match.replace(/,/g, '.'); }));

有关正则表达式的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter