在一个相同长度的单词串中查找所有匹配项?

时间:2013-11-08 03:18:45

标签: javascript regex string string-matching

我有一个很长的Javascript字符串,其中包含以下字母:

"aapaalaakaaiartaxealpyaaraa"

此字符串实际上是3个字母单词的链式列表:"aap","aal","aak","aai", "art", "axe","alp", "yaa" and "raa"

实际上我有许多这些字符串,字长不同,长度可达200​​0字,所以我需要最快的方式来获取所有字符串以某个字符串开头的单词。因此,当搜索以"aa"开头的所有单词时,它应返回:

"aap","aal","aak" and "aai"  

有没有办法用正则表达式做到这一点?非常重要的是它只匹配每个3个字母的单词,因此之间的匹配不应计算在内,因此不应返回"aar",也不应返回"yaa""raa"

3 个答案:

答案 0 :(得分:2)

简单的方法:

var results = [];

for (var i = 0; i < str.length; i += 3) {
    if (str.substring(i, i + 2) === "aa") {
        results.push(str.substring(i, i + 3));
    }
}

不要问它是否是最快的 - 首先检查它是否足够快。 :)

答案 1 :(得分:2)

怎么样:

var str = 'aapaalaakaaiartaxealpyaaraa';
var pattern = /^aa/;

var result = str.match(/.{3}/g).filter(function(word) {
  return pattern.test(word);
});

console.log(result); //=> ["aap","aal","aak","aai"]

答案 2 :(得分:1)

"aapaalaakaaiartaxealpyaaraa".replace(/\w{3}|\w+/g,function(m){return m.match(/^aa/)?m+',':','}).split(',').filter(Boolean)