проблема с регулярным выражением - PullRequest
0 голосов
/ 11 августа 2010

Я использую это регулярное выражение

((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])) 

для сопоставления URL-адресов (найден здесь http://daringfireball.net/2010/07/improved_regex_for_matching_urls это нижний), и когда я использую совпадение в ActionScript 3, он возвращает ссылку и все после нее, поэтому, если я попробую это 'привет http://www.apple.com мир "он вернется" http://www.apple.com мир "как мне получить URL, а не часть" мир ".

1 Ответ

1 голос
/ 11 августа 2010

Это работает для меня:

var match = "hello http://www.apple.com world".match(/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i)

как это:

var match = "hello http://www.apple.com world".match(new RegExp(
    "\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)"+
    "(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\s()<>]+\\)))*\\))+"+
    "(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|"+
    "[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))",

    "i" // case insensitive
));

Просто запомните правила цитирования строк. Если вы цитируете свое регулярное выражение с //, как в первом примере, то вам нужно использовать обратную косую черту /. Если вы указываете свое регулярное выражение с "", то вам нужно использовать обратную косую черту, экранируя все " и \, поскольку сам обратный слэш имеет значение в строках.

Кроме того, помните, что URL-адрес попадает в первую группу захвата, к которой вы можете получить доступ:

if (match) {
    url = match[1];
}

или если вы укажете глобальный флаг g, то совпадения будут массивом всех захваченных URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...