首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助才能找到匹配的正则表达式

需要帮助才能找到匹配的正则表达式
EN

Stack Overflow用户
提问于 2015-10-06 12:58:58
回答 2查看 76关注 0票数 1

我的RegEx不像我想的那样工作,它应该这样做。

[^a-zA-Z](\d+-)?OSM\d*(?![a-zA-Z])

我将在javascript中使用这个regex来检查一个字符串是否与它匹配。

代码语言: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开头,后面跟着一个-
  • 可选匹配如果行以数字/s结尾
  • 匹配以上三项的总和
  • 如果行以字符/单词开头,则不匹配,但OSM除外
  • 没有匹配,如果行以chracter/word结尾,除了OSM

我希望有人能帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 13:19:02

代码语言:javascript
复制
[^a-zA-Z](\d+-)?OSM\d*(?![a-zA-Z])
  • 在regex中,可以指定所需的内容,而不是不需要的内容。这段代码说,必须是,一个不是字母的字符。我相信你想说的是一句台词的开头。您不需要指定没有字母,您将指定线路上的内容。正则表达式的开头用^表示(括号外)。您必须使用m标志来使regex多行。
  • (\d+-)?的意思是一个或多个数字,后面跟着-字符。?意味着这整个块不是必需的。如果您不需要外接数字,您可能需要使用[0-9],但这并不重要。代码的这一部分,你说得对。但是,如果不需要捕获块,则可以编写(?:)而不是()
  • \d*(?![a-zA-Z])使用展望,但您几乎不需要这样做。同样,指定您不想要的内容是个坏主意,因为这样我就可以编写OSMé了,而且由于您没有指定禁止é,所以它会匹配。指定允许的内容要简单得多。在您的情况下,因为您希望匹配行结束。因此,您可以编写\d*$,这意味着零或更多位数,后面跟着行尾。

/^(?:\d+-)?OSM\d*$/gm是最终的结果。

票数 1
EN

Stack Overflow用户

发布于 2015-10-06 13:03:12

您可以使用下列使用锚的简化模式:

代码语言:javascript
复制
^(?:\d+-)?OSM\d*$

所需的标志(如果匹配多行段落)是:g表示全局匹配,m用于多行匹配,以便^$匹配每一行的开始/结束。

编辑

(\d+-)匹配更改为(?:\d+-),这样它就不会分组。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32970631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档