我有一个约有2500个用逗号分隔的唯一关键字的排序列表。关键字是英文的,可以是由空格分隔的几个单词。 我需要逐步搜索输入标签中的单词输入。
/,a[^,]+(?=,)/gi this returns all keywords starting with an "a" or whatever typed in input tag.
确实非常有效,但它也会返回引导逗号。 演示https://regex101.com/r/4zRV12/1/
我知道很容易从匹配中删除这个逗号,但仍然想知道是否有办法在一次传递中执行此操作。 这是我的测试页面javascript
function reg(p){
patt=","+p+"[^,]+(?=,)";
var regex= new RegExp(patt, "gi");
var k = '';
cnt=0;
var res;
while ((res = regex.exec(str)) !== null) {
k=k + "<a href='#' onclick='fill(this.innerHTML)';>"+res[0]+"</a><br>";
cnt++;
}
k=cnt+"<br>"+k;
document.getElementById("kword").innerHTML = k;
}
function fill(w){
document.getElementById("searchTxt").value = w;
}
</script>
答案 0 :(得分:0)
我在你的正则表达式中略有改变,你可以使用这个正则表达式:
(?<=,)a[^,]+(?=,)
答案 1 :(得分:0)
除非我遗漏了什么,否则你应该能够用逗号分割排序列表,然后迭代结果数组,搜索输入:
var keywords = "apple, ant, baseball, golf, surfing, teapot";
var array = keywords.split(/,\s*/);
var pattern = /^a/i;
for (var j=0; j < array.length; j++) {
console.log(array[j] + (array[j].match(pattern) ? ' - match' : ''));
}
&#13;
我使用的模式将匹配所有以a
开头并且后跟任何内容的关键字。如果您在排序列表中找到第一个匹配项后需要短路,那么您可以突破上面的for
循环。
答案 2 :(得分:0)
你可以像这样使用捕获组
(?:,)(a[^,]+)
然后在您的javascript代码中,您可以使用
迭代匹配
var myString = ",Abdul Rahim,Abhakara Kiartivonses,Airavata,Akha,Amanpuri,Amari Atrium";
var myRegexp = new RegExp("(?:,)(a[^,]+)", "gi");
while( match = myRegexp.exec(myString))
{
console.log(match[1])
}