2011-12-12 97 views
0

OK正则表达式对我来说是最令人困惑的事情之一。我正尝试在Javascript中执行此操作。我有一个搜索字段,用户将输入一系列字符。代码要么是:正则表达式在查找字符时分割数字字符串

999MC111

或只是

999MC

总是有2个字母字符。但前面可能有1-4个字符,最后可能有1-4个字符。

如果代码ENDS带有Alpha字符,那么我运行某个ajax脚本。如果有数字+2个字母+数字....它运行一个不同的Ajax脚本。

我的挣扎是我知道\ d是2位数字....但它可能不总是2位数字。

那么,我的正则表达式代码将分裂成一个数组。或者其他的东西。

我认为正确的正则表达式将是(/ ^([0-9] +)([A-ZA-Z] +)([0-9] +)$/

但我怎么做确保在中间的只有2个字母字符?

感谢

回答

0

好了,所以我没有真正关心的中间2个字符....所有真正重要的是第一组数字和最后一组数字(如果有的话)。

所以基本上我只是需要处理数字。所以我这样做:

var lead = '123mc444'; //For example purposes 
var regex = /(\d+)/g; 
var result = (lead.match(regex)); 

var memID = result[0]; //First set of numbers is member id 
if(result[1] != undefined) { 
    var leadID = result[1]; 
} 
+0

[memID,leadID] = lead.match(/ \ d +/g); – renevanderark

1

你可以使用正则表达式/\d$/以确定它是否有一个小数结束。

\d匹配一个十进制的性格,$的结束相匹配字符串。/ char专业人员将表达方式包含在内。

尝试在您的JavaScript控制台中逐行运行此操作。

var values = ['999MC111', '999MC', '999XYZ111']; // some test values 

// does it end in digits? 

!!values[0].match(/\d$/); // evaluates to true 
!!values[1].match(/\d$/); // evaluates to false 
0

/^\d{1,4}[a-zA-Z]{2}\d{0,4}$/相匹配的一系列的1-4位,后面是一系列的2个字母字符,接着另一系列的0-4数字的正则表达式。

这个正则表达式:/^\d{1,4}[a-zA-Z]{2}$/匹配一系列的1-4位数字,后面只有2个字母字符。

+0

好吧,那么我如何将我的字符串拆分为数字,字母,数字?我尝试过var lead = str.split(/^[a-zA-Z] {2} $ /),但是lead [0]返回整数 – swg1cor14

+0

您可以将离散捕获组添加到上述正则表达式中,即:'/ ^( \ d {1,4})([a-zA-Z] {2})(\ d {0,4})$ /',然后使用JavaScript的string.replace()函数将每个捕获组与源字符串转换为单独的字符串变量看到这个jsFiddle的工作示例:http://jsfiddle.net/zXjF9/ – Aaron

+0

其实,使用此更新的示例:http://jsfiddle.net/TuEtG/。如果找到匹配的正则表达式,它只会分割字符串。 – Aaron

1

要指定必须使用括号{}标记的确切数量,因此,如果你知道有2个字母标记你把{2},如果你知道有可能是0-4个数字,你把{0,4}

^([0-9]{0,4})([a-zA-z]{2})([0-9]{0,4})$ 

上述正则表达式的计算结果如下:

  • 999MC ---> TRUE
  • 999MC111 - > TRUE
  • 999MA C111 ---> FALSE
  • MC ---> TRUE

表达为捕获组分裂通过分组子表达式来完成到括号

正如你可以在下面的链接查看:

http://regexr.com?2vfhv

你获得此:

3捕获组:
组1:([0-9]{0,4})
组2:([a-zA-z]{2})
组3:([0-9]{0,4})

相关问题