Javascript正则表达式条件

时间:2016-09-08 22:00:09

标签: javascript regex

我有这样的字符串:

#WTK-56491650H #=> want to capture '56491650H'
#M123456       #=> want to capture 'M123456'

我希望在#之后匹配所有内容,除非有破折号然后我想要破折号之后的所有内容。我有一种感觉,我很接近,但也许不是。我发现了很多关于javascript正则表达式条件的东西,如果不是其他的话,我永远无法做到这一点。它只匹配#和它之后的匹配。

这是我到目前为止所做的:

/((?=-{1})-(.+)|(?!-{0)#(.+))/

演示:https://regex101.com/r/bY0yC6/1

3 个答案:

答案 0 :(得分:2)

您可以将此正则表达式与可选匹配项一起使用,以使用#-之间的所有内容:

/#(?:[^-]*-)?([^#-]+)$/mg

Updated RegEx Demo

答案 1 :(得分:0)

使用单个正则表达式,您的完全匹配将始终包含哈希和/或短划线,因为您使用它来定义可接受的字符串,但匹配的分组可以为您提供您正在查找的信息对

您希望字符串以哈希开头,因此您的正则表达式应包含#

接下来,您之前不需要任何内容​​,包括短划线(.*-)?,我们会添加一个问号,因为这是一个可选部分(即如果没有短划线)

最后,我们可以抓住最后一组留下的所有内容,这将是您的回答(.*)

Lux

指出的完整表达式为#(.*-)?(.*)

答案 2 :(得分:0)

这是一个使用我不喜欢的非捕获组(?:stuff)的解决方案,所以我不必深入挖掘结果组来找到我感兴趣的字符串。

(?:#)(?:[\w\d]+-)?([\w\d]+)

首先抛出#字符,然后抛出包含-字符的内容(如果有),然后将其余字符分组为匹配。