2016-08-25 3 views
1

У меня возникла проблема с подстрокой с строкой. Моя подстрока и строки являются чем-то вродеСопоставить подстроку со строкой

var str="My name is foo.I have bag(s)" 
var substr="I have bag(s)" 

теперь, когда я использую str.match (SubStr) возвращает нуль, вероятно, потому, что функция MATCH() принимает входные данные как регулярное выражение и в моем случае это путается с " («Я пытался использовать« \ »перед круглыми скобками, но это не сработало. Функция indexOf() работает, но мне не разрешено использовать это. Я также использовал test() и exec(), но без каких-либо успехов

+3

Если вы хотите, чтобы проверить, если строка содержит подстроку, сделать '!! ~ str.indexOf (подстрока)', или еще лучше в ES6 , 'str.contains (substr)'. –

+0

Что вы на самом деле пытаетесь сделать? Можете ли вы показать нам свой вывод, который вы ищете – bipen

+0

@Derek 朕 會 功夫 Я думаю, что у javascript doen't есть какой-либо метод. – Mayank

ответ

2

В современных двигателях вы можете просто использовать String.prototype.includes:

str.includes(substr) 

Если вы хотите что-то, что работает в старых браузерах и позволяет избежать String.prototype.indexOf, вы могли бы реализовать includes, петля вручную через строку:

String.prototype.includes = function (substr, start) { 
    var i = typeof start === 'number' ? start : 0; 
    // Condition exists early if there are not enough characters 
    // left in substr for j to ever reach substr.length 
    for (var j = 0; i + substr.length < this.length + j + 1; ++i) { 
     j = substr[j] === this[i] ? j + 1 : 0; 
     if (j === substr.length) 
      return true; 
    } 
    return false; 
}; 

Если вы настойчивы в использовании теста регулярного выражения можно использовать побег функция от this answer, чтобы правильно espace substr для использования в регулярном выражении; в этом случае он добавляет обратную косую черту перед ( и ):

new RegExp(substr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).test(str) 
Смежные вопросы