This question already has answers here:
How can I match overlapping strings with regex?
                            
                                (6个答案)
                            
                    
                12个月前关闭。
        

    

我想匹配所有出现的字符串。

例:

pc+pc2/pc2+pc2*rr+pd


我想检查pc2值和正则表达式匹配的数量before and after special character是否存在。

var str = "pc+pc2/pc2+pc2*rr+pd";
var res = str.match(new RegExp("([\\W])pc2([\\W])",'g'));


但是我只有+pc2/+pc2*/pc2+不能进入。

问题在于第一次比赛/被删除。因此,此后,它开始从pc2+pc2*rr+pd检查。这就是为什么/pc2+值不进入匹配的原因。

我该如何解决这个问题?

最佳答案

您需要某种递归正则表达式来实现您要获取的内容,如果字符串中的值为lastIndex,则可以使用exec来操纵p



let regex1 = /\Wpc2\W/g;
let str1 = 'pc+pc2/pc2+pc2*rr+pd';
let array1;
let op = []
while ((array1 = regex1.exec(str1)) !== null) {
  op.push(array1[0])
  if(str1[regex1.lastIndex] === 'p'){
    regex1.lastIndex--;
  }
}


console.log(op)

07-24 22:00