1

我有以下正则表达式

var catalogueHrefRegex = /\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/;

例如,我正在针对 url 进行测试

var href = "xxx/compare/ax?model=xxx";

我运行以下代码

catalogueHrefRegex.test(href)

我希望它返回false,但它返回true。我正在尝试像这样的 URL

/automobiles/cr/...
/automobiles/ts/...
/automobiles/zs/...
/automobiles/ax/...
/automobiles/wx/...

我在 ts 末尾有 $ 因为我不想匹配'automobiles/tsx' 我尝试了以下但没有一个按预期工作

/\/automobiles\/((cr)|(ts$)|(zs)|(ax)|(wx))$/
/\/automobiles\/*(cr)|(ts$)|(zs)|(ax)|(wx)*$/

我不擅长正则表达式,所以我的尝试是在谷歌搜索之后。我怀疑我设置管道的方式错误或分组不正确,因为当我尝试“cr”时,它按预期工作,但我不确定如何对 cr/ts/zs/ax/wx 进行分组以便它说匹配汽车/ cr或ts或...

http://jsfiddle.net/WdXXx/

我想要的结果的正确正则表达式是什么?感谢您的时间

4

1 回答 1

1

所以有几个问题。首先,交替应用于包含它的整个组。其次,$匹配输入字符串的结尾(或多行模式下的行尾)。所以你的第一个正则表达式:

/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/ 

将匹配文字/automobiles/cr或文字ts后跟字符串结尾或文字zs或文字ax或文字wx后跟字符串结尾。

我怀疑你想要这样的模式:

/\/automobiles\/(cr|ts|zs|ax|wx)\//

这将匹配一个文字/automobiles/后跟一个文字cr, ts, zs, ax, 或wx后跟一个文字/

我删除了,$因为在您使用的示例中/...,这意味着在 final 之后还有其他字符/

你可以在这里测试它。

于 2013-08-26T16:34:58.207 回答