簡體   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