在Javascript中通过regexp替换字符串

时间:2015-10-30 13:53:42

标签: javascript regex replace

我想用一次调用使用regexp替换很多术语,是否可能?在下面的示例中,我想分别将所有空格ö字符替换为 _ -

  

模式:( +)|(ö+)

     

源字符串:Abc dfö/ab.ai dois ö

     

替换模式:$1_$2-

     

当前结果:Abc _-df_ö-/ab.ai _-dois _-_ö-

     

预期结果:Abc_df-/ab.ai_dois_-

感谢。

1 个答案:

答案 0 :(得分:2)

使用回调函数检查哪个组“有效”并相应地替换:

var re = /( +)|(ö+)/g; 
var str = 'Abc dfö/ab.ai dois ö';
var result = str.replace(re, function (m, g1, g2) {
    return g1 ? "_" : "-";
});
document.getElementById("r").innerHTML = result;
<div id="r"/>

.replace()中的第二个参数接受一个函数。

  

要调用以创建新子字符串的函数(代替从参数#1 收到的子字符串)。

请参阅Specifying a function as a parameter部分中有关回调函数参数的更多详细信息。

<强>更新

您可以将符号(因为您正在搜索单个符号)映射到替换符号,并在1个正则表达式中指定它们。然后,在回调函数中,您可以使用匹配文本中的第一个字符获取必要的值。

var rx = / +|ö+|ë+|ü+/g;
str = "Abc dfö/ab.ai dois ööö üüü";
console.log(str);
map = { 
    " ": "_", 
    "ö": "-", 
    "ü": "+", 
    "ë": "^"
};
result = str.replace(rx, function (match) {
    return map[match[0]]; }
);
console.log(result);
// Abc dfö/ab.ai dois ööö üüü => Abc_df-/ab.ai_dois_-_+