繁体   English   中英

需要帮助以找到正确的正则表达式模式以进行匹配

[英]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
  • 可选匹配,如果行以数字/ s AND开头,后跟-
  • 如果行以位数结尾,则可选匹配
  • 匹配以上所有3个
  • 如果行以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM