我需要一些有关正则表达式的帮助。
我正在通过JavaScript执行以下操作,以“屏蔽”所有可能使用以下规则组成的特殊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
就可以了...
.+
像这样使非贪婪
m = url.match(/\b((?:[\d_]+>)?.+?\:\/\/(?:www.)?)/i);
注意?
之后.+
。这意味着RegEx必须匹配到:
当前表达式之后的第一个。如果不使用?
,它将使其变得贪婪,并且将消耗掉所有字符,直到:
字符串中的最后一个字符。
而且,你不必逃避:
,你必须逃脱.
后www
。所以您的RegEx会变成这样
m = url.match(/\b((?:[\d_]+>)?.+?:\/\/(?:www\.)?)/i);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句