node.js正则表达式字符串参数中的匹配组不起作用

时间:2018-04-15 04:39:40

标签: javascript node.js regex regex-group

String.prototype.replace() method documentation说:

  

将字符串指定为参数

     

替换字符串可以包含以下特殊替换模式:

     
      
  • $$:插入“$”。
  •   
  • $&:插入匹配的子字符串。
  •   
  • $`:插入匹配子字符串之前的字符串部分。
  •   
  • $':插入匹配子字符串后面的字符串部分。
  •   
  • $n:其中n是一个小于100的正整数,插入 n 括号内的子匹配字符串,前提是第一个参数为{{1对象。请注意,这是1索引。
  •   

浏览器兼容性部分还指示Node.js支持RegExp命令。

但是,我在Node.js中尝试了以下内容:

String.replace

我希望答案分别为> 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$1") 'lalalalalalalffffff' > 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$2") 'lalalalalalalffffff' > 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$3") 'lalalalalalalffffff' lala。什么在这里不起作用?

2 个答案:

答案 0 :(得分:4)

如您的示例所示,您的示例输入为lalalalalalalffffff,但请注意第一个l之前的f。问题是你的正则表达式没有任何匹配,因为它找不到一个或多个la s后跟一个f,因为那个愚蠢的l

您可以通过 Regex101.com

自行查看

如果您确实希望保留额外的l,并让$2输出la,则可以尝试:

(la)(la[l]?)*(f.*)

<强> over here

而且,如果您希望$2lalalalalal匹配,则可以使用:

(la)((?:la[l]?)*)(f.*)

lalala

lalalalafffffff也匹配

答案 1 :(得分:2)

它无效,因为你的正则表达式与你的字符串不匹配(这可能是错误的)。

您在最后a之后错过了l,或者您必须删除最后一个l

lalalalalalalffffff =&gt; lalalalalalalaffffff

&#13;
&#13;
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$1"));
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$2"));
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$3"));
&#13;
&#13;
&#13;