JavaScript indexOf忽略Case

时间:2009-08-07 17:13:06

标签: javascript

我正在尝试查找图片的源名称noPic是否为大写或小写。

var noPic = largeSrc.indexOf("nopic");

我应该写:

var noPic = largeSrc.toLowerCase().indexOf("nopic");

但是这个解决方案不起作用......

5 个答案:

答案 0 :(得分:23)

您可以将正则表达式与不区分大小写的修饰符一起使用 - 诚然不一定与indexOf一样快。

var noPic = largeSrc.search(/nopic/i);

答案 1 :(得分:17)

不,没有不区分大小写的方法来调用该函数。也许你的第二个例子不起作用的原因是因为你错过了对text()函数的调用。

试试这个:

var search = "nopic";
var noPic = largeSrc.text().toLowerCase().indexOf(search.toLowerCase());

答案 2 :(得分:3)

尝试:

var lowerCaseLargeSrc = largeSrc.toLowerCase();
var noPic = lowerCaseLargeSrc.indexOf("nopic");

答案 3 :(得分:2)

请注意,如果搜索字符串来自用户输入,则需要转义特殊的正则表达式字符,这最终会降低regexp方法的速度,使得toLowerCase()方法在这种情况下最快。

这就是它的样子:

var search = getUserInput();

/* this slows it down */
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

答案 4 :(得分:1)

只有largeSrc已经是字符串时,您的代码才有效。你可能会得到一个输入,而不是html元素。因此,使用jQuery将任何潜在的输入元素解析为其中的文本。例如:

while (scan.hasNext()) {
   if (scan.hasNextDouble()) {
     double value = scan.nextDouble();
     out.println(value);
   } else {
     scan.next();
   }
}