У меня есть следующее:
if (referrer.indexOf("Ral") == -1) { ... }
Я хочу сделать Ral
нечувствительным к регистру, чтобы он мог быть RAl
, rAl
и т.д. и все равно совпадал.
Есть ли способ сказать, что Ral
должен быть нечувствительным к регистру?
Добавьте .toLowerCase()
после referrer
. Этот метод превращает строку в строку в нижнем регистре. Затем используйте .indexOf()
, используя ral
вместо Ral
.
if (referrer.toLowerCase().indexOf("ral") === -1) {
Того же самого можно добиться и с помощью регулярного выражения (особенно полезно, когда требуется проверка на динамические шаблоны):
if (!/Ral/i.test(referrer)) {
// ^i = Ignore case flag for RegExp
Другой вариант заключается в использовании метода поиска как следовать:
if (referrer.search(new RegExp("Ral", "i")) == -1) { ...
Это выглядит более элегантно, затем преобразовать всю строку в нижний регистр и может быть более эффективно. <БР>
С столоверчением()код есть два прохода по строке, один проход по всей строке, чтобы преобразовать его в нижний регистр, а другой искать нужного индекса.<БР> С
регулярное выражение` код один проход по строке, которая выглядит, чтобы соответствовать желаемого индекса.<БР>
Поэтому, на длинных строк рекомендую использовать регулярное выражение
версия (я думаю, что для коротких строк эта эффективность достигается за счет создания хотя объект выражение
)
Есть несколько подходов здесь.
Если вы хотите выполнить сравнение без учета регистра проверить только этот экземпляр, сделать что-то вроде следующего.
if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
...
Кроме того, если вы'вновь регулярно выполняя эту проверку, вы можете добавить новый метод indexOf()`-как способ на эту строку, но сделать его нечувствительным к регистру.
String.prototype.indexOfInsensitive = function (s, b) {
return this.toLowerCase().indexOf(s.toLowerCase(), b);
}
// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
Из ES2016 вы также можете использовать немного лучше / легче / более элегантный способ:
if (referrer.includes("Ral")) { ... }
или
if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }
Вот некоторые сравнения .метод indexOf()
и .включает в себя()
:
https://dev.to/adroitcoder/includes-vs-indexof-in-javascript
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
Это'с 2016 года, и там's нет четкого пути, как это сделать? Я надеялась на copypasta. Я'придется идти.
Дизайн Примечания: я хотел, чтобы минимизировать использование памяти и, следовательно, повышение скорости - так нет копирование/мутирующие строк. Я предполагаю, что В8 (и других систем) можно оптимизировать эту функцию.
//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
//TODO: guard conditions here
var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
var needleIndex = 0;
var foundAt = 0;
for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
var needleCode = needle.charCodeAt(needleIndex);
if (needleCode >= 65 && needleCode <= 90) needleCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
var haystackCode = haystack.charCodeAt(haystackIndex);
if (haystackCode >= 65 && haystackCode <= 90) haystackCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
//TODO: code to detect unicode characters and fallback to toLowerCase - when > 128?
//if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
if (haystackCode !== needleCode)
{
foundAt = haystackIndex;
needleIndex = 0; //Start again
}
else
needleIndex++;
if (needleIndex == needle.length)
return foundAt;
}
return -1;
}
Моя причина для названия:
Почему не...:
столоверчением()
- потенциальный неоднократные призывы к столоверчения на одну и ту же строку.Выражение
- неудобно искать с переменной. Даже объекта regexp неловко, чтобы избежать символовДля более эффективного поиска используйте следующий код,
var myFav = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";
// Check for matches with the plain vanilla indexOf() method:
alert( theList.indexOf( myFav ) );
// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );
В первое предупреждение(), JavaScript и вернулись на "-1" и - другими словами, метод indexOf() не нашел совпадений: это просто потому, что "наличие" это в нижнем регистре в первой строке, и правильно, с большой буквы во-вторых. Чтобы выполнить поиск независимый от регистра при помощи indexOf(), вы можете сделать обе строки в верхнем или нижнем регистре. Это означает, что, как и в второе предупреждение(), JavaScript будет только проверить на вхождение строки, вы ищете, капитализация игнорируется.
Ссылка, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
Если "рекомендатель" - это массив, вы можете использовать findIndex()
if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}
Пример для любого языка:
'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
Здесь'ы мое мнение:
Сценарий:
var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
$("#textContainer").html(originalText)
var text = $("#textContainer").html()
var val = $("#search").val()
if(val=="") return;
var matches = text.split(val)
for(var i=0;i<matches.length-1;i++) {
var ind = matches[i].indexOf(val)
var len = val.length
matches[i] = matches[i] + "<span class='selected'>" + val + "</span>"
}
$("#textContainer").html(matches.join(""))
HTML-код:
<input type="text" id="search">
<div id="textContainer">
lorem ipsum is simply dummy text of the printing and typesetting industry. lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of letraset sheets containing lorem ipsum passages, and more recently with desktop publishing software like Aldus pagemaker including versions of lorem ipsum.</div>
Вы можете попробовать это
в
str = "Wow its so COOL"
searchStr = "CoOl"
console.log(str.toLowerCase().includes(searchStr.toLowerCase()))
в