[英]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.