[英]Need help to find the right regex pattern to match
我的RegEx不能按照我的想法工作。
[^a-zA-Z](\\d+-)?OSM\\d*(?![a-zA-Z])
我将在JavaScript中使用此正则表达式,以检查字符串是否与之匹配。
Should match:
12345612-OSM34
12-OSM34
OSM56
7-OSM
OSM
Should not match:
-OSM
a-OSM
rOSMann
rOSMa
asdrOSMa
rOSM89
01-OSMann
OSMond
23OSM
45OSM678
一行,代表我的JavaScript中的字符串。
https://www.regex101.com/r/xQ0zG1/3
匹配规则:
OSM
-
OSM
以外的字符/单词开头,则不匹配 OSM
以外的行以chracter / word结尾,则不匹配 我希望有人能帮帮忙。
您可以使用锚点使用以下简化模式:
^(?:\d+-)?OSM\d*$
所需的标志(如果匹配多行段落)将是: g
表示全局匹配, m
表示多行匹配,因此^
和$
匹配每行的开头/结尾。
将(\\d+-)
匹配更改为(?:\\d+-)
,使其不分组。
[^a-zA-Z](\d+-)?OSM\d*(?![a-zA-Z])
[^a-zA-Z]
在正则表达式中,指定所需的内容,而不是不需要的内容。 这段代码说必须有一个不是字母的字符。 我相信您想说的是匹配一行的开头。 您无需指定没有字母,反正将要指定该行中的字母。 正则表达式的开头用^
表示(括号外)。 您必须使用m
标志使正则表达式变为多行。
(\\d+-)?
表示一个或多个数字,后跟一个-
字符。 ?
意味着不需要整个块。 如果您不希望使用外来数字,则可以改用[0-9]
,但这并不重要。 这部分代码,您做对了。 但是,如果不需要捕获块,则可以编写(?:)
而不是()
。
\\d*(?![a-zA-Z])
使用超前,但您几乎不需要这样做。 同样,指定您不想要的内容是一个坏主意,因为这样我就可以编写OSMé
,因为您没有指定é
被禁止,所以它会匹配。 指定允许的内容要简单得多。 在您的情况下,因为您要匹配行尾。 因此,可以改写\\d*$
,表示零个或多个数字,然后是行尾。
/^(?:\\d+-)?OSM\\d*$/gm
是最终结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.