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'
,la
和la
。什么在这里不起作用?
答案 0 :(得分:4)
如您的示例所示,您的示例输入为lalalalalalalffffff
,但请注意第一个l
之前的f
。问题是你的正则表达式没有任何匹配,因为它找不到一个或多个la
s后跟一个f
,因为那个愚蠢的l
。
您可以通过 Regex101.com
自行查看如果您确实希望保留额外的l
,并让$2
输出la
,则可以尝试:
(la)(la[l]?)*(f.*)
<强> over here 强>
而且,如果您希望$2
与lalalalalal
匹配,则可以使用:
(la)((?:la[l]?)*)(f.*)
lalala
lalalalafffffff
也匹配
答案 1 :(得分:2)
它无效,因为你的正则表达式与你的字符串不匹配(这可能是错误的)。
您在最后a
之后错过了l
,或者您必须删除最后一个l
lalalalalalalffffff
=&gt; lalalalalalalaffffff
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;