[英]JavaScript indexOf to ignore Case
我正在尝试查找图像的源名称中是否有noPic
可以是大写或小写。
var noPic = largeSrc.indexOf("nopic");
我应该写:
var noPic = largeSrc.toLowerCase().indexOf("nopic");
但是这个解决方案不起作用......
您可以将正则表达式与不区分大小写的修饰符一起使用 - 诚然不一定像 indexOf 那样快。
var noPic = largeSrc.search(/nopic/i);
不,没有不区分大小写的方式来调用该函数。 您的第二个示例不起作用的原因可能是因为您缺少对text()
函数的调用。
尝试这个:
var search = "nopic";
var noPic = largeSrc.text().toLowerCase().indexOf(search.toLowerCase());
请注意,如果搜索字符串来自用户输入,您需要转义特殊的正则表达式字符。
这是它的样子:
var search = getUserInput();
/* case-insensitive search takes around 2 times more than simple indexOf() */
var regex = RegExp(search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), "i");
var noPic = testString.search(regex);
查看更新的 jsperf:http: //jsperf.com/regex-vs-tolowercase-then-regex/4
脚注:从https://stackoverflow.com/a/3561711/1333402转义的正则表达式
尝试:
var lowerCaseLargeSrc = largeSrc.toLowerCase();
var noPic = lowerCaseLargeSrc.indexOf("nopic");
仅当 largeSrc 已经是字符串时,您的代码才有效。 您可能会收到一个 html 元素的输入。 因此,使用 jQuery 将任何潜在的输入元素解析为其中的文本。 例子:
var noPic = largeSrc.text().toLowerCase().indexOf("nopic");
如何使用 findIndex 代替,这样您就可以在回调中执行所有 toLowerCase() 。 对我来说效果很好:
// Not Supported in IE 6-11
const arr = ['HELLO', 'WORLD'];
const str = 'world';
const index = arr.findIndex(element => {
return element.toLowerCase() === str.toLowerCase();
});
console.log(index); // 👉️ 1
if (index !== -1) {
// 👉️ string is in the array
}
信用: https ://bobbyhadz.com/blog/javascript-make-array-indexof-case-insensitive
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.