запускается с ошибкой JavaScript - PullRequest
2 голосов
/ 11 сентября 2009

Я использую startswith reg exp в Javascript

if ((words).match("^" + string)) 

но если я введу такие символы, как , ] [ \ /, Javascript выдает исключение Есть идеи?

Ответы [ 4 ]

9 голосов
/ 11 сентября 2009

Если вы используете регулярное выражение, вы должны убедиться, что передали правильное Регулярное выражение в match (). Проверьте список специальных символов , чтобы убедиться, что вы не передали недопустимое регулярное выражение. Следующие символы всегда должны быть экранированы (ставьте \ перед ним): [\ ^ $. |? * + ()

Лучшим решением было бы использовать substr () следующим образом:

if( str === words.substr( 0, str.length ) ) {
   // match
}

или решение, использующее indexOf ((выглядит немного чище):

if( 0 === words.indexOf( str ) ) {
   // match
}

затем вы можете добавить метод beginWith () к прототипу строки, который включает любое из двух вышеуказанных решений, чтобы сделать использование более читабельным:

String.prototype.startsWith = function(str) {
    return ( str === this.substr( 0, str.length ) );
}

При добавлении к прототипу вы можете использовать его следующим образом:

words.startsWith( "word" );
2 голосов
/ 11 сентября 2009

Можно также использовать indexOf, чтобы определить, начинается ли строка с фиксированного значения:

str.indexOf(prefix) === 0
1 голос
/ 16 сентября 2009

Если вы действительно хотите использовать регулярные выражения, вы должны экранировать специальные символы в вашей строке. У PHP есть функция для этого, но я не знаю ни одной для JavaScript. Попробуйте использовать следующую функцию, которую я нашел из [Snipplr] [1]

function escapeRegEx(str)
{
   var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g"); // .*+?|()[]{}\
   return str.replace(specials, "\\$&");
}

и использовать как

var mystring="Some text";
mystring=escapeRegEx(mystring);



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

String.prototype.startsWith=function(string) {
   return this.indexOf(string) === 0;
}

и использовать как

var mystring="Some text";
alert(mystring.startsWith("Some"));
1 голос
/ 11 сентября 2009

Если вы хотите проверить, начинается ли строка с фиксированного значения, вы также можете использовать substr:

words.substr(0, string.length) === string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...