Ответ 1
Вы можете использовать регулярное выражение с модификатором без учета регистра - по общему признанию, не обязательно так быстро, как indexOf.
var noPic = largeSrc.search(/nopic/i);
Я пытаюсь найти, если изображение имеет в своем исходном названии 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());
Обратите внимание, что если строка поиска находится от пользовательского ввода, вам нужно будет избежать специальных символов регулярного выражения, что в конечном итоге замедляет подход 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
footnote: regexp escaping из fooobar.com/questions/2655/...
Попробуйте:
var lowerCaseLargeSrc = largeSrc.toLowerCase();
var noPic = lowerCaseLargeSrc.indexOf("nopic");
Ваш код будет работать, только если largeSrc уже является строкой. Вместо этого вы можете получить входной элемент html. Итак, используйте jQuery для разрешения любого потенциального элемента ввода в текст, который внутри него. Пример:
var noPic = largeSrc.text().toLowerCase().indexOf("nopic");