2016-09-21 45 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

相关问题