Chr*_*ing 268 javascript search case-insensitive string-comparison
我正在尝试使用JavaScript中的两个字符串进行不区分大小写的搜索.
通常它会是这样的:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
Run Code Online (Sandbox Code Playgroud)
该/i
标志将不区分大小写.
但我需要搜索第二个字符串; 没有旗帜它完美无缺:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Run Code Online (Sandbox Code Playgroud)
如果我将/i
标志添加到上面的示例中,它将搜索searchstring而不是变量"searchstring"中的内容(下一个示例不起作用):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Dan*_*Dan 370
是的,使用.match
,而不是.search
..match
调用的结果将返回与其自身匹配的实际字符串,但它仍可用作布尔值.
var string = "Stackoverflow is the BEST";
var result = string.match(/best/i);
// result == 'BEST';
if (result){
alert('Matched');
}
Run Code Online (Sandbox Code Playgroud)
使用这样的正则表达式可能是在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');
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*sky 166
更换
var result= string.search(/searchstring/i);
Run Code Online (Sandbox Code Playgroud)
同
var result= string.search(new RegExp(searchstring, "i"));
Run Code Online (Sandbox Code Playgroud)
小智 37
如果您只是搜索字符串而不是更复杂的正则表达式,则可以使用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);
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;
Run Code Online (Sandbox Code Playgroud)
Chr*_*ute 22
假设我们想在字符串变量needle
中找到字符串变量haystack
.有三个问题:
string.toUpperCase
和string.toLowerCase
.使用忽略大小写的正则表达式.例如,var needleRegExp = new RegExp(needle, "i");
接下来是needleRegExp.test(haystack)
.needle
.请注意,needle
不包含任何正则表达式特殊字符.逃避这些使用needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
.needle
并且haystack
只是忽略大小写,请确保"^"
在"$"
正则表达式构造函数的开头和结尾添加.考虑点(1)和(2),一个例子是:
var haystack = "A. BAIL. Of. Hay.";
var needle = "bail.";
var needleRegExp = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i");
var result = needleRegExp.test(haystack);
alert(result);
Run Code Online (Sandbox Code Playgroud)
ES6+:
let string="Stackoverflow is the BEST";
let searchstring="best";
let found = string.toLowerCase()
.includes(searchstring.toLowerCase());
Run Code Online (Sandbox Code Playgroud)
includes()
返回true
如果searchString
在一个或多个位置或出现false
其他。