0

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

"aapaalaakaaiartaxealpyaaraa"

这个字符串实际上是一个由 3 个字母组成的链表:"aap","aal","aak","aai", "art", "axe","alp", "yaa" and "raa"

实际上,我有很多这样的字符串,它们的字长不同,最长可达 2000 个单词,所以我需要最快的方法来获取所有以某个字符串开头的单词。因此,在搜索所有以"aa"它开头的单词时,应返回:

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

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

4

3 回答 3

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"]
于 2013-11-08T03:24:36.750 回答
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));
    }
}

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

于 2013-11-08T03:22:56.940 回答
1
"aapaalaakaaiartaxealpyaaraa".replace(/\w{3}|\w+/g,function(m){return m.match(/^aa/)?m+',':','}).split(',').filter(Boolean)
于 2013-11-08T03:29:24.663 回答