用于检测字符串中重复字母的代码。
var str="paraven4sr";
var hasDuplicates = (/([a-zA-Z])\1+$/).test(str)
alert("repeating string "+hasDuplicates);
我收到“ false”作为上述字符串“ paraven4sr ”的输出。但是这个代码对于像 paraaven4sr这样的字符串正常工作。我的意思是如果字符连续重复,代码会将输出显示为“ TRUE”。如何重写此代码,以便当字符在字符串中重复时输出为“ TRUE”
答案 0 :(得分:23)
var str="paraven4sr";
var hasDuplicates = (/([a-zA-Z]).*?\1/).test(str)
alert("repeating string "+hasDuplicates);
正则表达式/([a-zA-Z])\1+$/
正在寻找:
([a-zA-Z]])
- 它在第一组中捕获的一封信;然后\1+
- 紧接着它的一封或多份副本;然后$
- 字符串的结尾。将其更改为/([a-zA-Z]).*?\1/
而不是搜索:
([a-zA-Z])
- 它在第一组中捕获的一封信;然后.*?
- 零个或多个字符(?
表示尽可能少);直到\1
- 它找到第一个匹配字符的重复。如果您要求第二个匹配项必须位于字符串末尾,那么您可以将$
添加到正则表达式的末尾,但是可以从您想要的文本描述中添加{{1}}似乎没有必要。
答案 1 :(得分:2)
试试这个:
var str = "paraven4sr";
function checkDuplicate(str){
for(var i = 0; i < str.length; i++){
var re = new RegExp("[^"+ str[i] +"]","g");
if(str.replace(re, "").length >= 2){
return true;
}
}
return false;
}
alert(checkDuplicate(str));
这是jsfiddle
答案 2 :(得分:1)
只测试重复的字母数字字符(包括下划线_
):
console.log(/(\w)\1+/.test('aab'));
答案 3 :(得分:0)
这样的东西?
String.prototype.count=function(s1) {
return (this.length - this.replace(new RegExp(s1,"g"), '').length) / s1.length;
}
"aab".count("a") > 1
编辑:对不起,只是看到你没有在搜索函数来查找是否多次找到一封信,而是查找一封信是否重复。无论如何,我把这个功能留在这里,也许它可以帮助你。对不起;)