javascript - 如何忽略正则表达式中 URL 周围的字符

标签 javascript regex

我有以下正则表达式

var URL_REGEX = /(^|[\s\n]|<br\/?>)((?:(?:https?|ftp):\/\/)?[\-A-Z0-9\u00A0-\uD7FF\uE000-\uFDCF\uFDF0-\uFFFD+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi;

我能够正确捕获以下 URL:

var someString1 = "hello http://stackoverflow.com";
var someString2 = "hello www.stackoverflow.com";
var someString3 = "hello stackoverflow.com";
var someString4 = "hello stackoverflow.com?foo=bar&foo=baz&foo-bar=baz";

但假设我有

var wrappedUrl = "hello (www.stackoverflow.com)";

我捕获了带有括号的 URL(我不希望这样)。如何只捕获 URL?

这无法被捕获。我没有匹配到:

var wrappedUrl = "hello [www.stackoverflow.com]";

最佳答案

你可以使用

/((https?|ftp)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?([a-z0-9-.]*)\.([a-z]{2,4})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/gi

请参阅regex demo

说明:

  • ((https?|ftp)\:\/\/)? - 方案
  • ([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)? - 用户名和密码
  • ([a-z0-9-.]*)\.([a-z]{2,3}) - 主机名或 IP 地址
  • (\:[0-9]{2,5})? - 端口地址
  • (\/([a-z0-9+\$_-]\.?)+)*\/? - 路径
  • (\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)? -获取查询
  • (#[a-z_.-][a-z0-9+\$_.-]*)? - anchor

查看 JS 演示:

var re = /((https?|ftp)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?([a-z0-9-.]*)\.([a-z]{2,4})(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/gi; 
var str = `hello http://stackoverflow.com
hello www.stackoverflow.com
hello stackoverflow.com
hello stackoverflow.com?foo=bar&foo=baz&foo-bar=baz
hello [www.stackoverflow.com]
hello (www.stackoverflow.com)`;
 
while ((m = re.exec(str)) !== null) {
    document.body.innerHTML += m[0] + "<br/>";
}

关于javascript - 如何忽略正则表达式中 URL 周围的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281987/

相关文章:

javascript - 如何检查到期日期是否不到一个月?

JavaScript 显示警报消息

C++11 正则表达式匹配不以句点结尾的完整单词?

javascript - 语法错误 : Invalid regular expression: nothing to repeat

javascript - 如何在js中使用正则表达式获取子字符串

javascript - 获取对象中的 "next"数值

javascript - 在 Angular 5 中,如何从父组件访问动态添加的子组件?

javascript - 如何使用 JQuery 单击 anchor 以便 href 也被调用?

regex - Oracle 正则表达式匹配空格

regex - 匹配以不同字母开头和结尾的单词