我从来都不擅长正则表达式语法,有人可以帮我检查一个 URL 是否与我的示例中的特定结构匹配吗?
.* 可以是任何东西,包括 /-_# 等,0-9 可以是任何数字长度(例如 1993334)。
var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
// match found
}
我从来都不擅长正则表达式语法,有人可以帮我检查一个 URL 是否与我的示例中的特定结构匹配吗?
.* 可以是任何东西,包括 /-_# 等,0-9 可以是任何数字长度(例如 1993334)。
var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
// match found
}
试试这个:
\/articles\/[0-9]+\/.*
因此,转义斜线,并使用+
指定必须有“一个或多个”前面的元素。
使用 [0-9]+ 而不是 [0-9] 并正确使用斜线..
var pattern = new RegExp(\/articles\/[0-9]+\/(.*));
if (pattern.test(document.location.href)) {
// match found
}
你已经得到了答案,所以没问题,但就像 Cerbrus 告诉你的那样,我将解释为什么正则表达式不起作用。
new RegExp('/articles/[0-9]/[.*]');
该/articles/
部分是完全正确的。
您已经对[0-9]
(任何数字)有所了解,但您已指定“这仅出现一次”。通过添加 a+
您可以指定“一个或多个”,就像您添加 a*
它意味着“零个或多个”一样。
在您的最后一场比赛中[.*]
,您匹配“任何字符”(.
)重复“零次或多次”(*
)次,因此/articles/2/
可以匹配(之后没有任何内容)的 URL,我认为这是不需要的行为。
完全准确地说,您甚至可以使用正则表达式
^/articles/[0-9]+/.+$
而^
意思是“这必须是开始”,$
意思是“这必须是结束”。
If you don't include these, an URL like /non-relevant-url/articles/123/my-article/whatever/foo/bar
could be matched (and you might not want to match if it starts with /non-relevant-url
- the ^
fixes this.)
Note: The $
isn't really necessary in this example, seeing as you end it with a "match everything past this point", but I included it so you'd know what it means (as it's just as useful to know as ^
)
Hope it gave you a tiny insight in regex, which once learned is incredibly powerful.