Различное поведение регулярных выражений на веб-странице и расширение Chrome - PullRequest
0 голосов
/ 16 июня 2011

Я пробую это регулярное выражение на этой странице: http://www.regular -expressions.info / javascriptexample.html

, где Regex = (?:http:\/\/)?(?:www.)?facebook\.com\/([\w\-\.]*)?

и строка субъекта = http://www.facebook.com/xxxxxx

Это возвращает мне два совпадения: http://www.facebook.com/xxxxxx и xxxxxx

Тот же самый javascript, который я встроил в расширение chrome, однако там показано только одно совпадение: 'http://www.facebook.com/'. Есть идеи ? Ниже приведен код:

var re = new RegExp("(?:http:\/\/)?(?:www.)?facebook\.com\/(?:profile\.php\?id=(?=\d.*))?([\w\-]*)?");
  var m = re.exec("http://www.facebook.com/xxxxx");
  if (m == null) {
    alert("No match");
  } else {
    var s = "Match at position " + m.index + ":\n";
    for (i = 0; i < m.length; i++) {
      s = s + m[i] + "\n";
    }
    alert(s);
  }

1 Ответ

2 голосов
/ 16 июня 2011

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

var re = new RegExp("(?:http:\\/\\/)?(?:www.)?facebook\\.com\\/(?:profile\\.php\\?id=(?=\\d.*))?([\\w\\-]*)?");

В javascript вы также можете создавать шаблоны регулярных выражений без строк:

var re = /(?:http:\/\/)?(?:www.)?facebook\.com\/(?:profile\.php\?id=(?=\d.*))?([\w\-]*)?/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...