正则表达式 - 匹配直到有等量的2个特定字符

时间:2017-12-05 00:23:42

标签: javascript regex

例如,如果我有以下句子:

  在逃跑之前,一只猫咬了一条狗在上面

如果我想要使用的2个字符是'a'和'b',那么我想匹配到等于'a'和'b'的点,如下所示:

  

一只猫咬着狗屁股

在上述情况下,句子有5个和3个。我想要达到3 a和3 b的程度。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

这是不可能的。

a n b n 不是regular,因此即使使用增强的正则表达式,在数学上也不可能与正则表达式匹配。

您可以使用以下函数来获取不使用正则表达式的范围:

var input = "a cat bit a dog on the butt b";
console.log(getRange(input, "a", "b"));

function getRange(input, char1, char2){
  var indexStart = -1;
  var count1 = 0, count2 = 0;
  
  for(var i = 0; i < input.length; i++){
    var char = input[i];
    switch(char){
      case char1:
        count1 += 1; break
      case char2:
        count2 += 1; break;
    }
    if(char == char1 || char == char2){
      if(indexStart == -1)
        indexStart = i;

      if(count1 == count2)
        return [indexStart, i];
    }
  }
  
  return [-1, -1];
}

答案 1 :(得分:1)

&#13;
&#13;
var a = 0,
    b = 0;
var result = 0;
var patten = /./g;
for (;patten.exec("a cat bit a dog on the butt before running away") != null;) {
    if (RegExp['$&'] == "a") {
        a++;
		if (a == b) {
			result = patten.lastIndex;
        }
    }
    if (RegExp['$&'] == "b") {
        b++;
        if (a == b) {
            result = patten.lastIndex;
        }
    }
}
console.log("1~" + result);
console.log("a cat bit a dog on the butt before running away".slice(0,result));
&#13;
&#13;
&#13; 顺便说一句,朕也会功夫。