正则表达式 - 后跟

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'这样的字符串也应该匹配。


1
数字可以不同于123和456吗?如果可以,它们最长可以有多长? - sp00m
@sp00m,是的,它可以是任何数字。 - Codler
5个回答

6
您可以尝试这个正则表达式:\d{3}/\d{3}(/\?.*)? 它将匹配:
- 三个数字, - 后跟一个"/", - 再后跟三个数字, - 再后跟“/?任意文本”(例如/?hi)(可选)。 此示例使用了正则表达式锚点,如^$,但如果您只尝试匹配目标字符串,则不需要它们。
var result = '123/456/?hi'.match(/\d{3}\/\d{3}(\/\?.*)?/);
if (result) {
    document.write(result[0]);
}
else {
    document.write('no match');
}

也许你可以用 + 替换 {3},用 [^ ]* 替换 .* - sp00m
@sp00m,原帖仍未说明是否可以有任意数量的数字。 - splash
当我尝试使用'123/456/?hi'.match(/\d{3}/\d{3}(/\?.*)?/)时,出现了错误。 - Codler

4

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

请参考JSFiddle

注意:如果你想匹配任意数量的数字,请使用\d+代替\d{3}。后者只匹配确切的3位数字。


我忘了说一件重要的事情。它不能以'?'结尾,例如像'123/456/?hi'这样的字符串也应该匹配。 - Codler
aha。然后更新你的问题。 - Shiplu Mokaddim

1

这是你要的:

[0-9]+/[0-9]+(/\?[^ ]*)?

0

你还有什么其他规则吗?

如果你想接受所有以除了?之外的字符结尾的字符串,可以使用"[^?]$"

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


我忘了说一件重要的事情。它不能以“?”结尾,例如“123/456/?hi”这样的字符串也应该匹配。 - Codler
然后使用第一个表达式。 - Joni

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/?", "/?"]

编辑:添加了其他情况


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接