0

我从来都不擅长正则表达式语法,有人可以帮我检查一个 URL 是否与我的示例中的特定结构匹配吗?

.* 可以是任何东西,包括 /-_# 等,0-9 可以是任何数字长度(例如 1993334)。

var pattern = new RegExp('/articles/[0-9]/[.*]');
if (pattern.test(document.location.href)) {
    // match found
}
4

3 回答 3

0

试试这个:

\/articles\/[0-9]+\/.*

因此,转义斜线,并使用+指定必须有“一个或多个”前面的元素。

于 2013-01-07T09:55:00.680 回答
0

使用 [0-9]+ 而不是 [0-9] 并正确使用斜线..

var pattern = new RegExp(\/articles\/[0-9]+\/(.*));
if (pattern.test(document.location.href)) {
    // match found
}
于 2013-01-07T10:04:43.697 回答
0

你已经得到了答案,所以没问题,但就像 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.

于 2013-01-07T10:06:05.037 回答