不区分大小写的搜索
我试图在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
标志,就会搜索搜索字符串,而不是变量"搜索字符串"中的内容(下一个例子不工作)。
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
我怎样才能做到这一点呢?
267
11
是的,使用
.match
,而不是.search
。.match
调用的结果将返回被匹配的实际字符串本身,但它仍然可以作为一个布尔值使用。在JavaScript中使用这样的正则表达式可能是最整洁、最明显的方式,但要记住它*是一个正则表达式,因此可以包含regex元字符。如果你想从其他地方获取字符串(例如,用户输入),或者你想避免转义大量的元字符,那么你最好使用
indexOf
这样的方式。替换
替换为
如果你只是搜索一个字符串,而不是一个更复杂的正则表达式,你可以使用
indexOf()
- 但记得先把两个字符串小写,因为indexOf()
是区分大小写的。或者在单行中。
假设我们想在字符串变量 "干草垛 "中找到字符串变量 "针"。 有三个疑难杂症。
string.toUpperCase
和string.toLowerCase
。 使用忽略大小写的正则表达式来代替。 例如,var needleRegExp = new RegExp(new needle, "i");
后面是needleRegExp.test(haystack)
。一般情况下,你可能不知道
needle
的值。 要注意needle
不包含任何正则表达式[特殊字符][1]。 使用needle.replace(/[-[\]{}()*+?,\^$|#\s]/g,"\$&");
来转义这些。在其他情况下,如果你想精确地匹配
needle
和haystack
,只是忽略大小写,一定要在开头加上"^"
,在正则表达式构造函数的最后加上"$"
。考虑到第(1)和第(2)点,下面是一个例子。
[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions。
ES6+。
includes()
如果searchString
出现在一个或多个位置,返回true
,否则返回false
。如果你担心在"未端字类"。 的情况下,去掉所有非字母数字的字符会有帮助。
我喜欢@CHR15TO'的答案,与我在其他类似问题上看到的其他答案不同,这个答案实际上展示了如何正确地转义用户提供的搜索字符串(而不是说有必要而不展示如何转义)。
然而,它仍然相当笨拙,而且可能相对较慢。 所以,为什么不对代码编写者的共同需求有一个具体的解决方案呢? (另外,为什么不把它包含在 ES6 API 中呢?)
我对类似问题的回答[https://stackoverflow.com/a/38290557/887092]实现了以下几点。
对大小写不敏感的比较有两种方法。
将字符串转换为大写,然后使用严格运算符(
===
)进行比较。 严格运算符如何处理操作数阅读东西在。 http://www.thesstech.com/javascript/relational-logical-operators使用字符串方法进行模式匹配。
使用"search" 字符串方法进行不区分大小写的搜索。 阅读有关搜索和其他字符串方法的内容,请点击。 http://www.thesstech.com/pattern-matching-using-string-methods
<!doctype html>。
。 。 <script>// 第一种方式
var a = "apple"。 var b = "apple"。 如果 (a.toUpperCase() === b.toUpperCase()) { alert("equal"); }
//2nd way
var a = ".Null and void";。 Null和void"。 document.write(a.search(/null/i))。
</script>我经常这样做,并使用一个简单的5行原型,接受varargs。 它快,而且在任何地方都能。
<!--开始片段。 js hide: false console: true babel.false --> -- begin snippet: js hide: false console: true false -->
<!--结束片段-->
你可以把所有的东西都写成小写。
我注意到,如果用户输入了一串文本,但没有选择任何自动完成选项就离开了输入,那么即使该字符串与数组中的一个字符串相吻合,也不会在隐藏的输入中设置任何值。 所以,在其他答案的帮助下,我做了这个。