繁体   English   中英

正则表达式在找到Alpha字符时分割数字串

[英]Regex split string of numbers at finding of Alpha Characters

好的Regex对我来说是最令人困惑的事情之一。 我试图在Javascript中这样做。 我有一个搜索字段,用户将输入一系列字符。 代码是:

999MC111

要不就

999MC

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

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

我的斗争是我知道\\ d是2位数...但它可能不总是2位数。

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

我认为正确的正则表达式是(/ ^([0-9] +)([a-zA-z] +)([0-9] +)$ /

但是我如何确保其中间只有2个字母?

谢谢

您可以使用正则表达式/\\d$/来确定它是否以小数结尾。

\\d匹配十进制字符, $匹配字符串的结尾。 /字符包含表达式。

尝试逐行在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

要指定令牌的确切数量,您必须使用括号{},因此如果您知道有2个字母标记放置{2} ,如果您知道可能有0-4位数,则放置{0,4}

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

上述RegEx评估如下:

  • 999MC ---> TRUE
  • 999MC111 - >正确
  • 999MAC111 ---> FALSE
  • MC ---> TRUE

将表达式拆分为捕获组是通过将子表达式分组到括号中来完成的

正如您在以下链接中看到的:

http://regexr.com?2vfhv

你得到这个:

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

正则表达式/^\\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个字母字符。

好的,所以我并不真正关心中间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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM