我正在尝试构建一个正则表达式函数,该函数将删除所有非字母数字字符并删除所有重复字符,例如这: aabcd * def%gGGhhhijkklmnoP \ 1223 将成为: abcddefgGhijklmnoPR3 。我能够轻松删除特殊字符,但不能为我的生活找出如何删除重复的字符?这是我当前删除特殊字符的代码:
var oldString = aabcd*def%gGGhhhijkklmnoP\122
var filtered = oldStringt.replace(/[^\w\s]/gi, "");
如何扩展上述正则表达式以检查重复的字符以及由非字母数字字符分隔的重复字符。
答案 0 :(得分:28)
正则表达式为/[^\w\s]|(.)\1/gi
在此测试:http://jsfiddle.net/Cte94/
它使用反向引用来搜索任何字符(.)
后跟相同的字符\1
除非“检查重复字符”,否则表示aaa => a
然后是/[^\w\s]|(.)(?=\1)/gi
在此测试:http://jsfiddle.net/Cte94/1/
请注意,两个正则表达式都不区分大小写。 A == a
,所以Aa
是重复。如果您不想要它,请从i
/gi
答案 1 :(得分:3)
\ 1+是关键
"aabcdd".replace(/(\w)\1+/g, function (str, match) {
return match[0]
}); // abcd
答案 2 :(得分:2)
非正则表达版:
var oldString = "aabcd*def%gGGhhhijkklmnoP\122";
var newString = "";
var len = oldString.length;
var c = oldString[0];
for ( var i = 1; i < len; ++i ) {
if ( c != oldString[i] ) {
newString += c;
}
c = oldString[i];
}
答案 3 :(得分:1)
短而简单的输入= Brahmananda输出:Brahmnd 参考:http://jsfiddle.net/p7yu8etz/5/
var str = "Brahmananda";
var reg = /(.)(.*?)(\1)/g;
while (reg.test(str))
str = str.replace(reg, "$1$2");
$("div").text(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><div>