Каков наилучший способ проверить, существует ли строка в другом?
Возможный дубликат:
JavaScript: строка содержит
Я ищу алгоритм проверки наличия строки в другом.
Например:
'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true
Спасибо заранее.
Ответы
Ответ 1
Используйте indexOf
:
'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh') > -1; //true
'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh') > -1; //true
Вы также можете расширить String.prototype
, чтобы иметь функцию contains
:
String.prototype.contains = function(substr) {
return this.indexOf(substr) > -1;
}
'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true
Ответ 2
Как отметил Digital, метод indexOf
- это способ проверки. Если вы хотите более декларативное имя, например contains
, вы можете добавить его в прототип String
.
String.prototype.contains = function(toCheck) {
return this.indexOf(toCheck) >= 0;
}
После этого ваш исходный образец кода будет работать как написанный
Ответ 3
Как насчет перехода в неизвестность:
!!~'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh'); //true
if(~'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh'))
alert(true);
Использование побитового NOT и логических NOT для преобразования его в логическое, чем его обратно.
Ответ 4
Я бы предположил, что использование предварительно скомпилированного регулярного выражения на основе Perl будет довольно эффективным.
RegEx rx = new Regex('Hello, my name is jonh', RegexOptions.Compiled);
rx.IsMatch('Hello, my name is jonh LOL.'); // true
Ответ 5
другой вариант может соответствовать регулярному выражению с помощью match(): http://www.w3schools.com/jsref/jsref_match.asp.
> var foo = "foo";
> console.log(foo.match(/bar/));
null
> console.log(foo.match(/foo/));
[ 'foo', index: 0, input: 'foo' ]