如何从一开始就制作正则表达式匹配模式?

时间:2014-10-18 02:57:05

标签: javascript regex

我需要一些正则表达式的帮助。

我正在从JavaScript到#34;掩码"可以使用以下规则组成的所有特殊URL:

  • 他们可能会以0>1223>1_23>

  • 开头
  • 他们可以从协议开始,例如:http:\\https:\\

  • 他们也可能拥有www.子域名

例如,对于https://www.example.com,它应该生成https://www. ...

所以我提出了以下JS:

var url = "0>https://www.example.com/plugins/page.php?href=https://forum.example.com/topic/some_topic";
m = url.match(/\b((?:[\d_]+>)?.+\:\/\/(?:www.)?)/i);
if (m) {
    url = m[1] + " ...";
}

console.log(url);

它适用于大多数情况,除了"重复"在我的示例中的URL,在这种情况下我得到这个:

  

0> https://www.example.com/plugins/page.php?href=https:// ...

我期待的时候:

  

0> https:// www。 ...

如何从头开始选择比赛?我想添加\b就可以了......

1 个答案:

答案 0 :(得分:3)

只需制作.+,非贪婪,就像这样

m = url.match(/\b((?:[\d_]+>)?.+?\:\/\/(?:www.)?)/i);

请注意?之后的.+。这意味着,RegEx必须匹配到当前表达式之后的第一个:。如果你不使用?,它会使它变得贪婪,它将消耗所有字符,直到字符串中的最后一个:

并且,你不必逃避:,你必须在.之后逃离www。所以你的RegEx会变成这样的

m = url.match(/\b((?:[\d_]+>)?.+?:\/\/(?:www\.)?)/i);