如何使用.search()方法在字符串中搜索多个变量

How to search multiple variables in a string with the .search() method

本文关键字:搜索 变量 字符串 search 何使用 方法      更新时间:2023-09-26

我找到了这个解决方案:如何使用.search()方法搜索多个字符串?

但我需要使用几个变量进行搜索,例如:

var String = 'Hire freelance programmers, web developers, designers, writers, data entry & more';
var keyword1 = 'freelance';
var keyword2 = 'web';
String.search(/keyword1|keyword2/);

您可以使用RegExp构造函数而不是文字来编写正则表达式。

String.search(new RegExp(keyword1+'|'+keyword2));

在正则表达式中使用字符串之前,您需要对字符串进行转义(除非您确信它们永远不会包含任何[|等字符),然后构建一个RegExp对象:

function escapeRegExp(string){
  return string.replace(/([.*+?^${}()|'[']'/''])/g, "''$1");
}
var re = new RegExp( escapeRegExp(keyword1) + "|" + escapeRegExp(keyword2) );
String.search(re);

如果你有一组搜索词,你可以概括如下:

var keywords = [ 'one', 'two', 'three[]' ];
var re = new RegExp(
  keywords.map(escapeRegExp).join('|')    // three[] will be escaped to three'[']
);
String.search(re);

search只返回第一个匹配的索引,不会再搜索。如果你想找到所有关键词的索引,你可以使用exec代替:

var myRe = new RegExp(keyword1 + '|' + keyword2, 'g')
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = "Found " + myArray[0] + " at position " + myArray.index;
  console.log(msg);
}

输出

在第5位找到自由职业者

在位置28处发现卷筒纸

DEMO