将`a`替换为`1`,将`ab`替换为`a`

时间:2016-04-04 14:21:21

标签: regex

给定一个字符串,我想将所有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无法正常工作。

(也许正则表达不是工作的正确工具。)

4 个答案:

答案 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是最好的。