我需要一些正则表达式的帮助。
我正在从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
就可以了......
答案 0 :(得分:3)
只需制作.+
,非贪婪,就像这样
m = url.match(/\b((?:[\d_]+>)?.+?\:\/\/(?:www.)?)/i);
请注意?
之后的.+
。这意味着,RegEx必须匹配到当前表达式之后的第一个:
。如果你不使用?
,它会使它变得贪婪,它将消耗所有字符,直到字符串中的最后一个:
。
并且,你不必逃避:
,你必须在.
之后逃离www
。所以你的RegEx会变成这样的
m = url.match(/\b((?:[\d_]+>)?.+?:\/\/(?:www\.)?)/i);