在单词中匹配两个相等的字符并用一个RE替换

时间:2016-03-26 09:27:32

标签: javascript regex

我想将两个相等的字符转换为单个字符,如bannana should be banana //remove "nn" into single "n"。 (除了:" aa"所有都应该如上所述转换)

i/p : khuddar  >>  o/p : khudar
i/p : maanas   >>  o/p : maanas
i/p : hello   >>  o/p : helo
i/p : apple   >>  o/p : aple

需要正则表达式来完成这些类型的工作。

2 个答案:

答案 0 :(得分:2)

使用capturing group and backreference

这是一个javascript示例:

"khuddar".replace(/([^a])\1/g, "$1")
// => "khudar"
"maanas".replace(/([^a])\1/g, "$1")
// => "maanas"
  • [^a] - 匹配不是a的字符。
  • (...) - 匹配正则表达式并将其保存到第1组(2,3,如果后面有更多括号,则将其保存)。
  • \1 - 群组的反向引用1.如果匹配的部分为b\1也会引用b

答案 1 :(得分:0)

如果您只需匹配任何字母a,则可以使用

.replace(/([b-z])\1/ig, "$1")

请参阅regex demo

正则表达式解释:

  • ([b-z]) - 捕获第1组捕获从bz(以及AZ的任何ASCII字母,因为/i修饰符正在制作模式不区分大小写)
  • \1 - 与inline backreference匹配的文本值与上面的组匹配(因此,模式匹配2个相同的ASCII字母

在替换模式中,使用$1 numbered replacement backreference替换2个相同的ASCII字母,其中1个字母出现。



var re = /([b-z])\1/gi; 
var str = 'khuddar<br/>maanas<br/>hello<br/>apple<br/>F11';
var subst = '$1'; 
var result = str.replace(re, subst);
document.body.innerHTML = result;
&#13;
&#13;
&#13;