题目
将字符串类似于"aabcdefgaabdd"连续在一起的去重,达到"abcdefgabd"的效果.
var regex = /(.)(?=(\1).*)/g;
var str = "aabcdefgaabdd";
str = str.replace(regex,'');
document.write(str);
思路
通过(.)匹配任意字符,判断当前匹配的字符后面有没有与它相邻的相同字符,若有则将当前字符替换为'';
\1:指反向引用,具体解释如下:
var str = “Is is the cost of of gasoline going up up”;
var patt1 = /\b([a-z]+) \b\1/ig;
document.write(str.match(patt1));
\b([a-z]+)是该表达式的第一个分组,\1是匹配第一个分组匹配到的内容, 也就是所谓的\1引用了第一个()匹配到的内容。
(x)(y)\2 该正则是想匹配到第一个字符是x,第二个字符是y,第三个字符也是y的内容,比如xyy能够被匹配到,但是xya、xyb就不能被匹配到。
下面看下该题目的变形:
题目
将字符串中除第一次出现的不同字符保留外,其余相同字符全部去除;
例:将字符串类似于"aabcdefgaabdd"连续在一起的去重,达到"abcdefg"的效果.
var regex = /(.)(?=.*(\1).*)/g;
var str = "aabcdefgaabdd";
str = str.split('').reverse().join('');
str = str.replace(regex,'').split('').reverse().join('');
document.write(str);
思路
先将字符反转
通过(.)匹配任意字符,判断当前匹配的字符后面有没有与它相同的字符,若有则将当前字符替换为'';
最后将字符串替换后的字符串反转回就行。