如何使用Javascript RegExp排除连接字符?

如何使用Javascript RegExp排除连接字符?,javascript,regex,Javascript,Regex,在下面的代码中,我想得到fnc(abcdx)和fnc(abcdy)作为使用javascript regexp的结果 我必须排除以xy结尾的单词 在此代码中,它应该是fnc(abcxy) 所以我尝试了这个代码,但失败了 var rst = str.match(/fnc\([^xy]*\);/gi); 我知道[^xy]排除x或y而不是xy 如何将连续字符(xy)排除在单词之外?一个选项是使用负前瞻来断言左括号之后和右括号之前的内容不包含xy \bfnc\((?![^()]*xy[^()]*\))[

在下面的代码中,我想得到fnc(abcdx)fnc(abcdy)作为使用javascript regexp的结果

我必须排除以xy结尾的单词

在此代码中,它应该是
fnc(abcxy)

所以我尝试了这个代码,但失败了

var rst = str.match(/fnc\([^xy]*\);/gi);
我知道[^xy]排除xy而不是xy


如何将连续字符(xy)排除在单词之外?

一个选项是使用负前瞻来断言左括号之后和右括号之前的内容不包含
xy

\bfnc\((?![^()]*xy[^()]*\))[^()]*\);
解释

  • \bfnc
    单词边界,然后匹配fnc
  • \(
    匹配
  • (?!
    负前瞻,检查以下内容是否正确
    • [^()]*xy[^()]*\)
      Match
      xy
      在除括号和Match
      之外的任何字符之间进行匹配
  • 关闭前瞻
  • [^()]*
    匹配除
    )以外的任何字符的0+倍
  • \)匹配

let str='fnc(abcdx);fnc(abcxy);fnc(abcdy);';
常量模式=/\bfnc\((?![^()]*xy[^()]*\)[^()]*\)/G

log(str.match(pattern))
您可以使用负片查找
(?它匹配任何不以
xy
结尾的内容

let str='fnc(abcdx);fnc(abcxy);fnc(abcdy);';
让结果=str.match(/fnc\([^)]*(?
\bfnc\((?![^()]*xy[^()]*\))[^()]*\);