Каков наилучший способ проверить, существует ли строка в другом?

Возможный дубликат:
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' ]