У меня проблема с string.match (часть) (JavaScript) - PullRequest
0 голосов
/ 03 сентября 2010
var string = $.trim("How are you ? are you fine ?");
var part = $.trim("How are you ? are you fine ?");

var SearchResult = string.match(part);

if (SearchResult != null && part!="") {
    alert("hello1");
}


string = $.trim("How are you ? a");
part = $.trim("How are you ? a");

SearchResult = string.match(part);

if (SearchResult != null && part!="") {
    alert("hello2");
}

string = $.trim("How are you ?");
part = $.trim("How are you ?");

SearchResult = string.match(part);

if (SearchResult != null && part!="") {
    alert("hello3");
}

Работает только третье предупреждение; в чем проблема в первой и второй строке?

Ответы [ 4 ]

2 голосов
/ 03 сентября 2010

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

1 голос
/ 03 сентября 2010

Когда match вызывается с объектом, отличным от RegExp, он преобразуется в RegExp:

Если передан объект не-RegExp obj, он неявно преобразуется в RegExp с помощью new RegExp(obj).

Это означает, что, поскольку ? является специальным символом в регулярных выражениях (то есть предыдущее выражение может повторяться ноль или один раз), вам необходимо экранировать его с помощью \?. И поскольку \ также необходимо экранировать в строковых объявлениях, вам потребуется:

var part = $.trim("How are you \\? are you fine \\?");

Более простой способ - использовать indexOf, который возвращает индекс начала матча, и -1, если совпадений не было:

string.indexOf(part) > -1
0 голосов
/ 03 сентября 2010

На самом деле, первые два оповещения работают правильно; третий совпадает только случайно. Если вы напечатаете результат матча, вы увидите, что в конце нет знака вопроса. Как сказали другие респонденты, ? - это метасимвол , поэтому /How are you ?/ соответствует последовательности «Как дела», за которой может быть пробел.

Как сказали другие, если вы хотите сопоставить буквальный вопросительный знак, вы должны избежать его. И если вы хотите, чтобы регулярное выражение совпадало с целой строкой или с чем угодно, вам нужно привязать его к обоим концам:

/^How are you \?$/
0 голосов
/ 03 сентября 2010

Должно быть:

part = $.trim("How are you \\? a")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...