具有多个条件的正则表达式分组

时间:2016-11-24 19:08:50

标签: javascript jquery regex

概念

Example: 0232699980132
0 232 699980132
0 - segment 1
232 - segment 2  (length = 3)
699980132 - segment 3 (length = 9)
Length of segment 2 and 3 should be 12 or 13 

该示例具有3个段,第一个段可以是0或24或0024。 第二段是232或其罐123或3434.第三段可以是任何数字,但第二段和第三段的组合应为12或13。

我试过

 /[?:0|24|0024]{1,3}[232|123|3434]{3,4}[0-9]{9}$/

问题:如果我将第3段修改为最小值9,但我必须将第2段和第3段限制为12或13,这是有效的。

我也尝试过制作小组,但它搞乱了所有

/[?:0|24|0024]{1,3}([232|123|3434]{3,4}[0-9])(?=.{14}$)$/

请告知。

https://jsfiddle.net/ohz7nnz7/

2 个答案:

答案 0 :(得分:1)

我建议使用2种不同的模式,一种用于测试,另一种用于提取。

var patt_test = /^(0024|24|0)(232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})$/;

这个将确保我们只匹配限定字符串。详细说明:

  • ^ -start of string
  • (0024|24|0) - 匹配0024240的第1组(不是您问题中的字符类!)(可缩短为((?:00)?24|0)
  • (232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9}) - 第2组捕获:
    • 232[0-9]{9,10} - 232号码,然后是9或10位数字
    • 123[0-9]{9,10} - 123号码,然后是9或10位数字
    • 3434[0-9]{9} - 3434号码,然后是9位
  • $ - 字符串结束。

一旦字符串以这种方式验证,我们可以继续使用以下内容提取3个部分:

var patt_extract = /^(0024|24|0)(232|123|3434)(\d{9,10})$/;

详细说明:

    字符串开头的
  • ^(0024|24|0) - 0024240
  • (232|123|3434) - 第2组捕获2321233434 文字字符序列
  • (\d{9,10}) - 第3组:任意9到10位
  • $ - 字符串结尾



var number = [];
number[0] = "0232699980132"; // this should be true as starts with 0
number[1] = "008973343430145"; // false
number[2] = "24232667870167"; // true
number[3] = "0024232656880187"; // true
number[4] = "024232623432190"; // this should be false because middle segment 24 is not allowed
number[5] = "02326568801878"; // this should be true

console.clear();
var patt_test = /^(0024|24|0)(232[0-9]{9,10}|123[0-9]{9,10}|3434[0-9]{9})$/;
var patt_extract = /^(0024|24|0)(232|123|3434)(\d{9,10})$/;
var result = false;
for(i=0; i<=(number.length-1); i++) {
	result = patt_test.test(number[i]);
  if (result) { // VALIDATE THE STRING
  	var first, second, third;
  	var m = patt_extract.exec(number[i]); // EXTRACT PARTS
  	if (m) { first = m[1]; second = m[2]; third = m[3]; }
  	var str = number[i]+" -- "+result+"--"+number[i].length+"--P1:"+first+"--P2:"+second+"--P3:"+third;
  	console.log(str);
  } else {
     console.log(number[i]+" -- "+result+"--"+number[i].length);
  }
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

怎么样:

^(?:0024|24|0)(?=(?:232|123)\d{10}$)(?=3434(?:\d{9})$)

^(?:0024|24|0)(?:(?:232|123)\d{10}|3434(?:\d{9}))$