我正在尝试通过查找关键字与数组进行交互,并将包含它们的密钥拆分为两个或更多个密钥,一个包含关键字,另一个包含关键字的开头和结尾。
例如,鉴于我有关键词“cat”和“dog”
var arrayinput = ["acat", "zdogg", "dogs"];
所需的输出将是
[ "a", "cat", "z", "dog", "g", "dog", "s" ]
我一直在制作包含关键字模式并使用.match()
的正则表达式。
但是,“acat”之类的内容会返回与关键字“cat”的有效匹配。鉴于“acat”,我需要单独看“a”,然后将“cat”视为有效。
答案 0 :(得分:3)
在此处查看:https://jsfiddle.net/3jtqc2s2/
arrayinput = [].concat.apply([], arrayinput.map(function (v) {
return v.split(/(cat|dog)/);
})).filter(function(v) {
return v !== "";
});
这也将检测多种猫或狗的术语。
答案 1 :(得分:0)
使用Array.forEach
和String.match
函数的解决方案:
var arrayinput = ["acat","zdogg","dogs"],
result = [],
matches;
arrayinput.forEach(function(word){
matches = word.match(/^(\w*)(cat|dog)+(\w*)$/i);
if (matches[1]) result.push(matches[1]);
if (matches[2]) result.push(matches[2]);
if (matches[3]) result.push(matches[3]);
});
console.log(result);
// the output:
["a", "cat", "z", "dog", "g", "dog", "s"]
答案 2 :(得分:0)
使用标准循环的另一种解决方案:
var result = [];
for(var currentValue of arrayinput) {
var obj = currentValue.split(/(cat|dog)/);
result = result.concat(obj.filter(function(v) {return v != '';}));
}
答案 3 :(得分:0)
使用强制转换为字符串,正则表达式替换和强制回到数组的三个相关解决方案。没有使用循环。不是说它优雅,高效或推荐,只是有可能。
var arrayinput = ["acat", "zdogg", "dogs"];
document.write(
arrayinput
.join(" ") // coerce to space-separated string
.replace(/(cat|dog)/g, " $1 ") // flank all keywords with spaces
.replace(/ +/g, " ") // collapse multiple spaces to one
.trim() // remove leading or trailing spaces
.split(" ") // re-create array, splitting at spaces
);
document.write("<br />");
document.write(
arrayinput
.join(" ") // coerce to space-separated string
.replace(/\B(cat|dog)/g, " $1") // precede embedded keyword-starts with spaces
.replace(/(cat|dog)\B/g, "$1 ") // follow embedded keyword-ends with spaces
.split(" ") // re-create array, splitting at spaces
);
document.write("<br />");
document.write(
arrayinput
.toString() // coerce to comma-separated string
.replace(/([^,])(cat|dog)/g, "$1,$2") // precede embedded keyword-starts with commas
.replace(/(cat|dog)([^,])/g, "$1,$2") // trail embedded keyword-ends with commas
.split() // re-create array, splitting at commas
);