从字符串中返回一个单词

时间:2017-11-30 16:52:55

标签: javascript arrays string dictionary split

我有一个3个字'walking running swimmming'的字符串,我想只返回那些有双字母的人。好吧,我找到了解决方法如何做到这一点,但我坚持要分开这些词。有任何想法吗?我试过.map(返回'不是函数'),。split()。也许我做错了什么?

P.S. var repeats = /([a-zA-Z])\1/;

7 个答案:

答案 0 :(得分:1)

您可以在字符串上运行.split(" "),然后遍历列表以执行检查

help if you need it

答案 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代替.,如果您的字符串可能包含其他字符,则会有不同的结果。

因此,使用该示例字符串,会发生以下情况:

  1. 'walking running swimming'变为['walking', 'running', 'swimming']
  2. 对于数组的每个元素,调用word => ... lambda。
    • walking没有两个重复字符的序列,因此test将返回false。
    • runningswimmingtest为真。
  3. filter返回测试为true的单词数组['running', 'swimming']

答案 4 :(得分:1)

您可以从字符串中获取多个匹配项(\w匹配[a-zA-Z0-9_]):

&#13;
&#13;
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;
&#13;
&#13;

匹配仅包含2个重复字符的字词:

&#13;
&#13;
console.log( 'walking running swimmming'.replace(/(.)\1\1+/g, 0).match(/\w*(\w)\1\w*/g) )
&#13;
&#13;
&#13;

答案 5 :(得分:1)

尝试以下方法:

&#13;
&#13;
var str = 'walking running swimmming';
var strArr = str.split(' ');
strArr.forEach(function(word){
  if(word.match(/([A-Za-z])\1/)){
    console.log(word);
  }
});
&#13;
&#13;
&#13;

答案 6 :(得分:-1)

&#13;
&#13;
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;
&#13;
&#13;

我应该注意,虽然我没有使用你的正则表达式(就像其他答案一样),但它确实正确地过滤了单词,并且性能略高于其他答案,并且比维护和修改更容易。一个正则表达式。

https://jsperf.com/return-double-letter-words-from-string