Это работает для меня:
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.