我的RegEx不像我想的那样工作,它应该这样做。
[^a-zA-Z](\d+-)?OSM\d*(?![a-zA-Z])
我将在javascript中使用这个regex来检查一个字符串是否与它匹配。
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我希望有人能帮忙。
发布于 2015-10-06 13:19:02
[^a-zA-Z](\d+-)?OSM\d*(?![a-zA-Z])^表示(括号外)。您必须使用m标志来使regex多行。(\d+-)?的意思是一个或多个数字,后面跟着-字符。?意味着这整个块不是必需的。如果您不需要外接数字,您可能需要使用[0-9],但这并不重要。代码的这一部分,你说得对。但是,如果不需要捕获块,则可以编写(?:)而不是()。\d*(?![a-zA-Z])使用展望,但您几乎不需要这样做。同样,指定您不想要的内容是个坏主意,因为这样我就可以编写OSMé了,而且由于您没有指定禁止é,所以它会匹配。指定允许的内容要简单得多。在您的情况下,因为您希望匹配行结束。因此,您可以编写\d*$,这意味着零或更多位数,后面跟着行尾。/^(?:\d+-)?OSM\d*$/gm是最终的结果。
发布于 2015-10-06 13:03:12
您可以使用下列使用锚的简化模式:
^(?:\d+-)?OSM\d*$所需的标志(如果匹配多行段落)是:g表示全局匹配,m用于多行匹配,以便^和$匹配每一行的开始/结束。
编辑
将(\d+-)匹配更改为(?:\d+-),这样它就不会分组。
https://stackoverflow.com/questions/32970631
复制相似问题