正则表达式字符串与管道不匹配

时间:2013-08-26 16:24:21

标签: javascript regex

我有以下正则表达式

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

我正在对网址进行测试,例如

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

我运行以下代码

catalogueHrefRegex.test(href)

我希望它返回false但返回true。我正在尝试像

这样的网址
/automobiles/cr/...
/automobiles/ts/...
/automobiles/zs/...
/automobiles/ax/...
/automobiles/wx/...

我在ts结束时有$,因为我不想匹配'cars / 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/

对于我想要的结果,正确的正则表达式是什么?谢谢你的时间

1 个答案:

答案 0 :(得分:1)

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

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

将匹配文字/automobiles/cr或文字ts,后跟字符串的结尾或文字zs或文字ax或文字{{1}然后是字符串的结尾。

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

wx

这将匹配文字/\/automobiles\/(cr|ts|zs|ax|wx)\// 后跟文字/automobiles/crtszsax后跟文字wx

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

您可以对其进行测试here