奇怪的javascript正则表达式替换问题
我有以下文字奇怪的javascript正则表达式替换问题,javascript,regex,Javascript,Regex,我有以下文字 text(-) 3 我想换成: -3 因此,我编写了以下正则表达式: 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1); -这不管用 然而,当我做以下事情时 var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1); output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1); (
text(-) 3
我想换成:
-3
因此,我编写了以下正则表达式:
'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
-这不管用
然而,当我做以下事情时
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1);
output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
(因此在第一部分中,我删除了?:
)它可以工作
所以用正则表达式对匹配进行分组时,我肯定错过了一些东西(或者只是一些愚蠢的东西)。任何帮助都将不胜感激 您可能正在寻找
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, '$1');
文本(-)3出现问题。替换(/text\((?:[^\)]+)\)/g,RegExp.$1)代码>
是一个非捕获组,因此在(?:[^\)]+)
$1
包含上一个正则表达式匹配中的捕获组,而不是当前的捕获组 就是RegExp.$1
在第二条语句中,regexvar output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1); output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
来自第一条语句,而不是第二条语句。因此,单独使用时,它是未设置的,不会创建预期的输出RegExp.$1
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, '$1');
文本(-)3出现问题。替换(/text\((?:[^\)]+)\)/g,RegExp.$1)代码>
是一个非捕获组,因此在(?:[^\)]+)
$1
包含上一个正则表达式匹配中的捕获组,而不是当前的捕获组 就是RegExp.$1
在第二条语句中,regexvar output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1); output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
来自第一条语句,而不是第二条语句。因此,单独使用时,它是未设置的,不会创建预期的输出RegExp.$1
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, '$1');
文本(-)3出现问题。替换(/text\((?:[^\)]+)\)/g,RegExp.$1)代码>
是一个非捕获组,因此在(?:[^\)]+)
$1
包含上一个正则表达式匹配中的捕获组,而不是当前的捕获组 就是RegExp.$1
在第二条语句中,regexvar output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1); output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
来自第一条语句,而不是第二条语句。因此,单独使用时,它是未设置的,不会创建预期的输出RegExp.$1
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, '$1');
文本(-)3出现问题。替换(/text\((?:[^\)]+)\)/g,RegExp.$1)代码>
是一个非捕获组,因此在(?:[^\)]+)
$1
包含上一个正则表达式匹配中的捕获组,而不是当前的捕获组 就是RegExp.$1
在第二条语句中,regexvar output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1); output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
来自第一条语句,而不是第二条语句。因此,单独使用时,它是未设置的,不会创建预期的输出RegExp.$1
?:
将使组捕获,这意味着它将捕获与[^\]+
匹配的任何内容,并且匹配的文本可用于替换和反向引用
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1);
调用String.replace
时,RegExp.$1
尚未初始化,因此输出结果将是“3”
。然后执行正则表达式,捕获组在text(-)
中捕获-
,并将其置于捕获组1中
已弃用的属性RegExp.$1
也会使用上次执行的RegExp
捕获组1的内容进行更新
然后在下一行:
output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
由于RegExp.$1
现在包含“-”
,因此替换结果为“-3”
RegExp.$1
已被弃用,因为它在RegExp
的所有执行之间共享,并且极易出错。还有一组其他属性RegExp.$2
到RegExp.$9
,其中包含最近执行的捕获组2到9的内容
解决方案
出于您的目的,您应该这样做:
var output = 'text(-) 3'.replace(/text\(([^\)]+)\) */g, "$1");
不清楚)
后面有多少空格,所以我添加了*
。要在替换中引用捕获组的内容,请在替换字符串中使用$1
。代码说明
删除?:
将使组捕获,这意味着它将捕获与[^\]+
匹配的任何内容,并且匹配的文本可用于替换和反向引用
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1);
调用String.replace
时,RegExp.$1
尚未初始化,因此输出结果将是“3”
。然后执行正则表达式,捕获组在text(-)
中捕获-
,并将其置于捕获组1中
已弃用的属性RegExp.$1
也会使用上次执行的RegExp
捕获组1的内容进行更新
然后在下一行:
output = 'text(-) 3'.replace(/text\((?:[^\)]+)\)/g, RegExp.$1);
由于RegExp.$1
现在包含“-”
,因此替换结果为“-3”
RegExp.$1
已被弃用,因为它在RegExp
的所有执行之间共享,并且极易出错。还有一组其他属性RegExp.$2
到RegExp.$9
,其中包含最近执行的捕获组2到9的内容
解决方案
出于您的目的,您应该这样做:
var output = 'text(-) 3'.replace(/text\(([^\)]+)\) */g, "$1");
不清楚)
后面有多少空格,所以我添加了*
。要在替换中引用捕获组的内容,请在替换字符串中使用$1
。代码说明
删除?:
将使组捕获,这意味着它将捕获与[^\]+
匹配的任何内容,并且匹配的文本可用于替换和反向引用
var output = 'text(-) 3'.replace(/text\(([^\)]+)\)/g, RegExp.$1);
调用String.replace
时,RegExp.$1
尚未初始化,因此输出结果将为