我有一个3个字'walking running swimmming'
的字符串,我想只返回那些有双字母的人。好吧,我找到了解决方法如何做到这一点,但我坚持要分开这些词。有任何想法吗?我试过.map(返回'不是函数'),。split()。也许我做错了什么?
P.S. var repeats = /([a-zA-Z])\1/;
答案 0 :(得分:1)
您可以在字符串上运行.split(" ")
,然后遍历列表以执行检查
答案 1 :(得分:1)
按空格将单词拆分为数组。使用.filter
仅返回重复字母的内容。在过滤器内部,测试它是否带有正则表达式和.test
的重复字母。如果是,则返回true,将其添加到新数组。
function doubles(words) {
const arr = words.split(" ");
return arr.filter(word => (/([a-zA-Z]).*?\1/).test(word));
}
doubles("walking running swimming"); // returns ["running", "swimming"]
找到了测试的正则表达式here
答案 2 :(得分:1)
我认为你想要的是这样的:
let result = 'walking running swimmming'
.split(' ') // turn into array
.filter(s => /([a-zA-Z])\1/.test(s)) // filter out elements of array
console.log(result)

返回
["running", "swimmming"]
答案 3 :(得分:1)
可能会有一个性能更高的答案,但我可能会选择这个,因为它是极简主义的。
'walking running swimming'
.split(' ')
.filter(word => /(.)\1/.test(word));
<强>说明强>
String.prototype.split
会返回一个单词数组。
Array.prototype.filter
为数组的每个元素调用lambda函数。如果函数返回true,则保留该元素,否则将其丢弃。然后返回过滤后的数组。
RegExp.prototype.test
返回true。
word => ...
是function (word) { return ... }
/(.)\1/
是一个RegExp,它匹配连续两次包含任何字符的字符串。如果您愿意,可以使用a-zA-Z
代替.
,如果您的字符串可能包含其他字符,则会有不同的结果。
因此,使用该示例字符串,会发生以下情况:
'walking running swimming'
变为['walking', 'running', 'swimming']
word => ...
lambda。
walking
没有两个重复字符的序列,因此test
将返回false。running
和swimming
将test
为真。filter
返回测试为true的单词数组['running', 'swimming']
答案 4 :(得分:1)
您可以从字符串中获取多个匹配项(\w
匹配[a-zA-Z0-9_]
):
console.log( 'walking running swimmming'.match(/\w*(\w)\1\w*/g) )
console.log( 'walking running swimmming'.match(/[a-z]*([a-z])\1[a-z]*/gi) )
&#13;
匹配仅包含2个重复字符的字词:
console.log( 'walking running swimmming'.replace(/(.)\1\1+/g, 0).match(/\w*(\w)\1\w*/g) )
&#13;
答案 5 :(得分:1)
尝试以下方法:
var str = 'walking running swimmming';
var strArr = str.split(' ');
strArr.forEach(function(word){
if(word.match(/([A-Za-z])\1/)){
console.log(word);
}
});
&#13;
答案 6 :(得分:-1)
var words = "walking running swimming".split(' ')
// ["walking", "running", "swimming"]
var double_letter_words = words.filter(
function(w) {
for (i = 0; i < w.length - 1; i++) {
if (w[i] == w[i+1]) return true
};
return false; })
// ["running", "swimming"]
console.log(double_letter_words);
&#13;
我应该注意,虽然我没有使用你的正则表达式(就像其他答案一样),但它确实正确地过滤了单词,并且性能略高于其他答案,并且比维护和修改更容易。一个正则表达式。