我有这样的字符串:
#WTK-56491650H #=> want to capture '56491650H'
#M123456 #=> want to capture 'M123456'
我希望在#之后匹配所有内容,除非有破折号然后我想要破折号之后的所有内容。我有一种感觉,我很接近,但也许不是。我发现了很多关于javascript正则表达式条件的东西,如果不是其他的话,我永远无法做到这一点。它只匹配#和它之后的匹配。
这是我到目前为止所做的:
/((?=-{1})-(.+)|(?!-{0)#(.+))/
答案 0 :(得分:2)
答案 1 :(得分:0)
使用单个正则表达式,您的完全匹配将始终包含哈希和/或短划线,因为您使用它来定义可接受的字符串,但匹配的分组可以为您提供您正在查找的信息对
您希望字符串以哈希开头,因此您的正则表达式应包含#
接下来,您之前不需要任何内容,包括短划线(.*-)?
,我们会添加一个问号,因为这是一个可选部分(即如果没有短划线)
最后,我们可以抓住最后一组留下的所有内容,这将是您的回答(.*)
由Lux
指出的完整表达式为#(.*-)?(.*)
答案 2 :(得分:0)
这是一个使用我不喜欢的非捕获组(?:stuff)
的解决方案,所以我不必深入挖掘结果组来找到我感兴趣的字符串。
(?:#)(?:[\w\d]+-)?([\w\d]+)
首先抛出#
字符,然后抛出包含-
字符的内容(如果有),然后将其余字符分组为匹配。