我从来没有使用正则表达式语法,有人可以帮助我检查URL是否与我的示例中的特定结构匹配吗?
。*可以是包括/ -_#etc在内的任何内容,0-9可以是任意数字长度(ex 1993334)。
var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
// match found
}
答案 0 :(得分:0)
试试这个:
\/articles\/[0-9]+\/.*
因此,请转义斜杠,并使用+
指定必须有前面元素中的“一个或多个”。
答案 1 :(得分:0)
使用[0-9] +而不是[0-9]并正确使用斜杠..
var pattern = new RegExp(\/articles\/[0-9]+\/(.*));
if (pattern.test(document.location.href)) {
// match found
}
答案 2 :(得分:0)
你已经得到了答案,所以没问题,但就像Cerbrus告诉你的那样,我会解释为什么正则表达式不起作用。
new RegExp('/articles/[0-9]/[.*]');
/articles/
部分完全正确。
您已经了解了[0-9]
(任何数字),但您已经指定“这只出现一次”。通过添加+
,您可以指定“一个或多个”,就像添加了*
一样,它意味着“零或更多”。
在您的上一场比赛[.*]
中,您将匹配“任何字符”(.
)重复“零或更多”(*
)次,因此您的网址为{{ 1}}(此后没有任何内容)可以匹配,我认为这是不需要的行为。
完全准确,您甚至可以使用
的正则表达式 /articles/2/
^/articles/[0-9]+/.+$
表示“这必须是开始”而^
表示“这必须是结束”。
如果您不包含这些内容,则可以匹配$
之类的网址(如果以/non-relevant-url/articles/123/my-article/whatever/foo/bar
开头,您可能不希望匹配 - /non-relevant-url
修复此问题。)
注意: ^
在这个例子中并不是真的有必要,看到你用“匹配过去这一点的所有内容”结束它,但我把它包括在内你所以知道它意味着什么(因为知道$
)
希望它能让你对正则表达式有一个小小的洞察力,曾经学过它非常强大。