我试图得到一个不区分大小写的搜索与JavaScript工作的两个字符串。

通常是这样的:

var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);

/i标志不区分大小写。

但我需要寻找第二根弦;如果没有国旗,它就完美了:

var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);

如果我在上面的例子中添加/ I标志,它将搜索searchstring,而不是变量“searchstring”中的内容(下一个例子不工作):

var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);

我怎样才能做到这一点呢?


当前回答

取代

var result= string.search(/searchstring/i);

with

var result= string.search(new RegExp(searchstring, "i"));

其他回答

不区分大小写的比较有两种方式:

将字符串转换为大写,然后使用严格操作符(===)进行比较。 使用字符串方法进行模式匹配: 使用"search"字符串方法进行不区分大小写的搜索。

<!doctype html > < html > < >头 <脚本> //第一种方式 Var a = "苹果"; var b = "苹果"; if (a.toUpperCase() === b.toUpperCase()) { alert("平等"); } / / 2路 var a = "无效"; document . write (a.search(/空/我)); > < /脚本 > < /头 < / html >

是的,使用。match,而不是。search。match调用的结果将返回匹配的实际字符串本身,但它仍然可以用作布尔值。

var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';

if (result){
    alert('Matched');
}

使用这样的正则表达式可能是JavaScript中最整洁、最明显的方法,但请记住,它是正则表达式,因此可能包含正则元字符。如果你想从其他地方获取字符串(例如,用户输入),或者如果你想避免转义大量元字符,那么你可能最好像这样使用indexOf:

matchString = 'best';
// If the match string is coming from user input you could do
// matchString = userInput.toLowerCase() here.

if (string.toLowerCase().indexOf(matchString) != -1){
    alert('Matched');
}

取代

var result= string.search(/searchstring/i);

with

var result= string.search(new RegExp(searchstring, "i"));

如果你只是搜索一个字符串,而不是一个更复杂的正则表达式,你可以使用indexOf() -但记住两个字符串都要小写,因为indexOf()是区分大小写的:

var string="Stackoverflow is the BEST"; 
var searchstring="best";

// lowercase both strings
var lcString=string.toLowerCase();
var lcSearchString=searchstring.toLowerCase();

var result = lcString.indexOf(lcSearchString)>=0;
alert(result);

或在单行中:

var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;

如果你担心“未终止字符类”的情况,删除所有非字母数字字符将是有帮助的:

searchstring = searchstring.replace(/[^a-zA-Z 0-9]+/g,'');