簡體   English   中英

使用JavaScript進行RegEx匹配和分離

[英]RegEx Matching and Separation Using JavaScript

我正在使用一個文本值可能為以下格式之一的系統:

  • A B C D
  • F1000
  • 1000
  • 1000A
  • F1000A

在大多數情況下,如果數字前面或后面有一個字母,那么只會有一個字母,但這並不能保證。

我試圖創建一些正則表達式來獲取前面的文本,數字和結尾的文本。 但是,我所能提出的最好成績並不理想,因此我需要根據比賽結果進一步細分比賽。 這三個不同的值中的每一個都必須放入數據庫中自己的存儲桶中。

我擅長找出僅數字的匹配項,但是它試圖打破我似乎無法正確獲取的混合值,並且似乎也無法獲得僅文本的匹配項。 我是否最好先匹配字母數字對,然后抓住我想要的零件?

目前,這些是我想出的正則表達式:

var regex0 = /[A-z]+?![0-9]/;
var regex1 = /[A-z]+[0-9]+/;
var regex2 = /[0-9]+/;
var regex3 = /[0-9]+[A-z]+/;
  • regex0應該獲得純文本匹配,但不起作用。
  • 當文本后跟數字時,regex1會適當地匹配。
  • regex2僅成功獲取數字。
  • 當數字后跟文本時,regex3會適當地匹配。

對於regex1regex3 ,我進行額外的比賽以僅從比賽中提取文本沒有問題,但我希望有一種方法可以一次完成所有工作。

只需使用3個捕獲的組:

/^(\D*)(\d*)(\D*)$/

正則演示

  • [AZ]{4}匹配ABCD
  • [AZ]\\d{4}F1000匹配
  • \\d{4}匹配1000
  • \\d{4}[AZ]匹配1000A
  • [AZ]\\d{4}[AZ]匹配F1000A

前面使用合格字符作為偽錨點。
其他部分是可選的,但是會匹配某些內容,因為它是合格的。

(?=[A-Za-z\\d])([A-Za-z]*)(\\d*)([A-Za-z]*)

展開式

 (?= [A-Za-z\d] )              # Assert a qualified character is ahead
 ( [A-Za-z]* )                 # (1)
 ( \d* )                       # (2)
 ( [A-Za-z]* )                 # (3)

火柴

 **  Grp 1 -  ( pos 1 , len 4 ) 
ABCD  
 **  Grp 2 -  ( pos 5 , len 0 )  EMPTY 
 **  Grp 3 -  ( pos 5 , len 0 )  EMPTY 

-------------

 **  Grp 1 -  ( pos 8 , len 1 ) 
F  
 **  Grp 2 -  ( pos 9 , len 4 ) 
1000  
 **  Grp 3 -  ( pos 13 , len 0 )  EMPTY 

-------------

 **  Grp 1 -  ( pos 16 , len 0 )  EMPTY 
 **  Grp 2 -  ( pos 16 , len 4 ) 
1000  
 **  Grp 3 -  ( pos 20 , len 0 )  EMPTY 

-------------

 **  Grp 1 -  ( pos 23 , len 0 )  EMPTY 
 **  Grp 2 -  ( pos 23 , len 4 ) 
1000  
 **  Grp 3 -  ( pos 27 , len 1 ) 
A  

-------------

 **  Grp 1 -  ( pos 31 , len 1 ) 
F  
 **  Grp 2 -  ( pos 32 , len 4 ) 
1000  
 **  Grp 3 -  ( pos 36 , len 1 ) 
A  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM