6

我怎样才能写一个匹配这个的正则表达式

123/456

123/456/?

但不是这个

123/456/

我想在第二个 / 它后面必须跟一个?。

例如,我希望它匹配这个

'123/456'.match(X) // return ['123/456']
'123/456/?'.match(X) // return ['123/456/?']
'123/456/'.match(X) // return null

更新

我错过了一件重要的事情。它不能以 '?' 结尾,像 '123/456/?hi' 这样的字符串也应该匹配

4

5 回答 5

5

你可以试试这个正则表达式:\d{3}/\d{3}(/\?.*)?

它会匹配

  • 3 位数
  • 其次是/
  • 后跟 3 位数字
  • 后跟/?any_text(例如/?hi)(可选)

此示例^使用和等正则表达式锚点$,但如果您仅尝试匹配目标字符串,则不需要它们。

var result = '123/456/?hi'.match(/\d{3}\/\d{3}(\/\?.*)?/);
if (result) {
    document.write(result[0]);
}
else {
    document.write('no match');
}
于 2012-04-24T07:00:30.347 回答
4

这个正则表达式可以工作/^\d{3}\/\d{3}(\/\?.*)?/

请参阅此JSFiddle

注意:如果您认为它应该匹配任意数量的数字,请使用\d+而不是\d{3}. 后者恰好匹配 3 位数字。

于 2012-04-24T07:00:39.167 回答
1

这个给你:

[0-9]+/[0-9]+(/\?[^ ]*)?
于 2012-04-24T07:27:10.043 回答
0

你还有什么其他规则?

如果要接受最后一个字符以外的所有字符串?,请使用"[^?]$"

如果要接受以 开头123/456和可选结尾的字符串/?,请使用"^123/456(/\?)?$"

于 2012-04-24T07:02:04.790 回答
0

我认为这应该有效:

'123/456'.match(/^123\/456(\/\?)?$/) // returns ["123/456", undefined]
'123/456/'.match(/^123\/456(\/\?)?$/) // returns null
'123/456/?'.match(/^123\/456(\/\?)?$/) // returns ["123/456/?", "/?"]

编辑:添加了其他案例

于 2012-04-24T07:03:17.683 回答