Метод EndsWith не соответствует строкам, которые заканчиваются знаком вопроса - PullRequest
0 голосов
/ 17 декабря 2011

Есть ли простой способ заставить эту функцию / метод работать со строками, заканчивающимися знаком вопроса?

String.prototype.EndsWith = function(str){return (this.match(str+"$")==str)}

var aa='a cat';
var bb='a cat?'; 

if( aa.EndsWith('cat') ){
    document.write('cat matched'+'<br\/>');
}

if( bb.EndsWith('cat?') ){
    document.write('cat? matched');
}

В текущем состоянии сопоставляется только первый тест (cat).

Ответы [ 4 ]

1 голос
/ 17 декабря 2011

Я бы пропустил регулярное выражение и просто сделал бы это:

String.prototype.EndsWith = function(str) {
  return (this.lastIndexOf(str) == this.length - str.length);
}
0 голосов
/ 17 декабря 2011

Я бы не стал использовать этот метод - просто напишите соответствующий reg exp, когда он вам нужен.

if(/cat[.'"?!]*$/.test(aa)){
}
0 голосов
/ 17 декабря 2011

Если вы собираетесь использовать регулярное выражение, основанное на текущей строке, вам придется экранировать все символы, которые имеют особое значение в регулярном выражении, поэтому не только вопросительные знаки, но и все остальное, что вы видите здесь .

Я думаю, было бы гораздо проще использовать .lastIndexOf():

String.prototype.EndsWith = function(str){
   return (this.lastIndexOf(str) === this.length - str.length);
}
0 голосов
/ 17 декабря 2011

P.S. : Обратите внимание, что функция должна начинаться со строчной буквы.

String.prototype.endsWith = function(str){
    return (this.lastIndexOf(str) === this.length - str.length)            
  }

var aa='a cat';
var bb='a cat?';

if(aa.endsWith('cat')){
    document.write('cat matched'+'<br\/>');
}

if(bb.endsWith('cat?')){
    document.write('cat? matched');
}

скрипка: http://jsfiddle.net/USzfa/4/

...