javascript - 如何替换 RegExp 捕获组?

标签 javascript regex

在字符串中,我需要替换所有出现的 [A]"A"'A' _A_[X]“X”'X'_X_。我试过 this answer但它给出了一个奇怪的结果(下面的代码)。我使用 new RegExp,因为它允许插入一个变量——AX 只是一个例子。

// CAPTURE GROUPS:       |------1-----|2|-----3------|
var regexp = new RegExp('(\'|\"|\_|\[)(A)(\'|\"|\_|\])', 'g')
var string = ' [A] _A_ "A" \'A\' A BAB "B" '
string.replace(regex, '$1X$3')

// ORIGINAL: [A] _A_ "A" 'A' A BAB "B" 
// EXPECTED: [X] _X_ "X" 'X' A BAB "B"
// ACTUAL:   [X] XXX XXX XXX X BXB XBX

最佳答案

问题是由反斜杠经历的两层解释引起的。首先你有 JavaScript 的字符串文字语法,它使用反斜杠来转义字符。当你有一个像

这样的字符串时
'(\'|\"|\_|\[)(A)(\'|\"|\_|\])'

在你的代码中,实际内容是:

('|"|_|[)(A)('|"|_|])

然后由 RegExp 构造函数解析,它将 [)(A)('|"|_|] 视为等同于 [A'"_( )|].

要保留反斜杠以便正则表达式引擎可以看到它,您必须在字符串中放置两个反斜杠。

您还可以使用字符类来稍微简化您的代码:

var regex = new RegExp('([\'"_[])A([\'"_\\]])', 'g')
var string = ' [A] _A_ "A" \'A\' A BAB "B" '
console.log(string.replace(regex, '$1X$2'));

关于javascript - 如何替换 RegExp 捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965113/

相关文章:

REGEX:从字符串中提取路径

javascript - 正则表达式强制特定长度,同时不以数字开头

javascript - 带有 Socket.IO 的原始 'this' 上下文

javascript - Three.js - 在相机方向和球体的交点处绘制一个大点

javascript - element.className 不会仅在 for 循环 JavaScript 中更改我的类名称

javascript - HtmlWebpackPlugin 忽略文件名

Regex SerDe 不支持 serialize() 方法错误

PHP:从字符串的开头/结尾修剪单词或它的一部分

c# - 如何在一行代码中转义所有值得转义的字符?

javascript - 根据下拉选择刷新 div 容器的全部内容