正则表达式替换'$ 1'-为什么是字符串?

时间:2019-01-28 19:05:07

标签: javascript regex string

一个愚蠢的问题,但无论如何我都会问:为什么JavaScript中正则表达式的替换部分包含在引号中作为字符串,而字符串本身似乎是一个变量?例如“ $ 2”

alert("banana split") // nana split
function reg(afilename)
{
    var rexp = new RegExp(/^(ba)(.+)/gim)
    var newName = afilename.replace(rexp, '$2')
    return newName
}

1 个答案:

答案 0 :(得分:3)

因为它本身不是 [Javascript]变量。

如果未将单引号引起来,则JavaScript会尝试将变量$2的值作为参数传递(是的,您可以给JavaScript变量名称以$开头),但你没有一个。

通过这种方式,Regex引擎获取实际的文字字符串$2,并赋予其自己的特殊含义。

这是抽象的完美示例,您可以在其中见证软件交互的两个“层”。还考虑document.write('<p>Text</p>'); -您不希望JavaScript尝试解析该HTML,对吧?您希望将其逐字传递给将要处理它的实体。