我想用一次调用使用regexp替换很多术语,是否可能?在下面的示例中,我想分别将所有空格和ö字符替换为 _ 和 - 。
模式:
( +)|(ö+)
源字符串:
Abc dfö/ab.ai dois ö
替换模式:
$1_$2-
当前结果:
Abc _-df_ö-/ab.ai _-dois _-_ö-
预期结果:
Abc_df-/ab.ai_dois_-
感谢。
答案 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_-_+