给定一个字符串,我想将所有ab
替换为a
,将所有a
替换为1
,以便
X_ab_X-a%X
变为
X_a_X-1%X
单独替换所有a
或全部ab
非常简单(在JS中)
mystring.replace(/a/gm, '1');
// mystring.replace(/ab/gm, 'a');
但是我没有看到如何将两者结合起来。所有可能的子字符串都可以在mystring
中出现,以便首先将ab
替换为TMP_UNIQUE_STRING
无法正常工作。
(也许正则表达不是工作的正确工具。)
答案 0 :(得分:4)
您可以将String#replace
与回调一起使用。
var str = "X_ab_X-a%X".replace(/ab?/g, function($0) {
return $0 === 'a' ? '1' : 'a';
});
使用ES6箭头功能,
"X_ab_X-a%X".replace(/ab?/g, $0 => $0 === 'a' ? '1' : 'a')
答案 1 :(得分:2)
您可以使用带有替换的简单正则表达式,并在替换回调中,检查值并相应地替换:
var re = /ab|a/g;
var str = 'X_ab_X-a%X';
var result = str.replace(re, function(val) {
return val === "ab" ? "a" : "1";
});
document.body.innerHTML = result;

请注意,ab
应该在交替中排在第一位,因为第一个分支匹配"胜出#34;。
答案 2 :(得分:0)
var str = "X_ab_X-a%X".replace(/ab?/g, function($0) {
return $0 === 'a' ? '1' : 'a';
});
答案 3 :(得分:0)
怎么样
("X_ab_X-a%X").replace(/a(?!b)/gm, '1');
Lookahead Zero-Length Assertions是最好的。