用于搜索逗号分隔字符串的RegExp

时间:2017-12-22 06:00:09

标签: javascript regex

我有一个约有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>

3 个答案:

答案 0 :(得分:0)

我在你的正则表达式中略有改变,你可以使用这个正则表达式:

(?<=,)a[^,]+(?=,)

答案 1 :(得分:0)

除非我遗漏了什么,否则你应该能够用逗号分割排序列表,然后迭代结果数组,搜索输入:

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