2016-09-21 44 views
1

我需要提取某些部分的Javascript字符串。我正在考慮用正則表達式來做,但不能拿出一個正確的。Javascript正則表達式用於提取字符串的某些部分

字符串可以有可變長度&可以包含所有可能的組合中的所有可能的字符。

我需要從中提取什麼,是10個相鄰的字符,即匹配接下來的兩個可能的組合中的一種:

  1. 9號& 1個字母「X」(大寫字母「X」,而不是X作爲可變信)
  2. 10號

所以,如果輸入的字符串是這樣的: 「[!?1X,X22; 87654321X9] ddee」,它應該只返回 「87654321X9」。

我希望我已經說得夠好了。提前致謝!

回答

3

此正則表達式將工作:

\d{9}X|\d{8}X\d|\d{7}X\d{2}|\d{6}X\d{3}|\d{5}X\d{4}|\d{4}X\d{5}|\d{3}X\d{6}|\d{2}X\d{7}|\d{1}X\d{8}|\d{10}|X\d{9}

如所描述的,它需要匹配9個位數和任何字母,該字母可在序列的任何位置。

\d{9}X # will match 9 digits and a letter in the end 
\d{8}X\d # will match 8 digits a lettter then a digit again 
... 
\d{1}X\d{8} # will match 1 digits a lettter then 8 digits 
\{10} # will match 10 digits 

編輯,以僅X

+0

是的,這個似乎正常工作! – kecman

+0

對不起,但你不瞭解我 - 「X」不代表任何信,只是大寫字母X(EKS)。這適用於任何字母,這是不可接受的 – kecman

+0

是的,你是對的 –

2

您可以使用此更簡單的正則表達式:

/(?!\d*X\d*X)[\dX]{10}/ 

正則表達式破碎:

(?!\d*X\d*X) # negative lookahead to fail the match if there are 2 X ahead 
[\dX]{10}  # match a digit or X 10 times 

由於不止一個X是不允許因使用負前瞻的,這個正則表達式只會允許10位或9位數字和一個X

RegEx Demo

此正則表達式比對方回答幾個優點:

  • 簡單多了的正則表達式更易於閱讀和維護
  • 只需不到一半的步驟來完成它可以是實質性的區別在較大的文本上。
+0

感謝匹配,可以使用這個正則表達式,你告訴我如何實現它,例如,如果輸入的字符串VAR輸入,我怎麼能得到輸出字符串(VAR輸出)? – kecman

+0

它不會匹配87654321X9 –

+0

它不適用於此:「[dd123987564X]」 – kecman

相關問題