我有以下正则表达式
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或......
对于我想要的结果,正确的正则表达式是什么?谢谢你的时间
答案 0 :(得分:1)
所以有几个问题。首先,交替适用于包含它的整个组。其次,$
匹配输入字符串的结尾(或多行模式下的行尾)。所以你的第一个正则表达式:
/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/
将匹配文字/automobiles/cr
或文字ts
,后跟字符串的结尾或文字zs
或文字ax
或文字{{1}然后是字符串的结尾。
我怀疑你想要这样的模式:
wx
这将匹配文字/\/automobiles\/(cr|ts|zs|ax|wx)\//
后跟文字/automobiles/
,cr
,ts
,zs
或ax
后跟文字wx
。
我删除了/
因为在您的示例中使用了$
,这意味着最终/...
后面还有其他字符。
您可以对其进行测试here。