Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免在以下脚本中使用两次替换(仅使用一个正则表达式)?_Javascript_Regex - Fatal编程技术网

Javascript 如何避免在以下脚本中使用两次替换(仅使用一个正则表达式)?

Javascript 如何避免在以下脚本中使用两次替换(仅使用一个正则表达式)?,javascript,regex,Javascript,Regex,我需要从以下位置编辑字符串: rgb(250,0,0)10px 10px 50px 0px 致: rgba(250,0,0,1)10px 10px 50px 0px 假设输入值总是正确的,我需要添加alpha通道1 我创建的下面的脚本可以工作,但我想知道双替换 我想知道您是否执行了更好的方法,可能只使用一个regex,避免使用replace两次或更好的替代方法 var\u convertBoxShadowToTgba=函数(boxShadow){ 返回框shadow.replace(/rgb/

我需要从以下位置编辑字符串:

rgb(250,0,0)10px 10px 50px 0px

致:

rgba(250,0,0,1)10px 10px 50px 0px

假设输入值总是正确的,我需要添加alpha通道1

我创建的下面的脚本可以工作,但我想知道双替换

我想知道您是否执行了更好的方法,可能只使用一个
regex
,避免使用
replace
两次或更好的替代方法

var\u convertBoxShadowToTgba=函数(boxShadow){
返回框shadow.replace(/rgb/i,'rgba')。replace(/\)/i,'1');
};
var original=“rgb(250,0,0)10px 10px 50px 0px”;
var final=_-Totgba(原件);
console.log(“原件”,原件);
控制台日志(“最终”,最终)正则表达式:

rgb(.*?\d)\)
说明:

rgb          # Match literal `rgb`
    (        # Start of capturing group (1)
        .*?  # Match every thing lazily
        \d   # Up to a digit
    )        # End of capturing group (1)
\)           # That is followed by a closing bracket
替换字符串:

rgba$1, 1)
$1
是对第一个捕获组的反向引用

JS代码:

original.replace(/rgb(.*?\d)\)/i, 'rgba$1, 1)')
正则表达式:

rgb(.*?\d)\)
说明:

rgb          # Match literal `rgb`
    (        # Start of capturing group (1)
        .*?  # Match every thing lazily
        \d   # Up to a digit
    )        # End of capturing group (1)
\)           # That is followed by a closing bracket
替换字符串:

rgba$1, 1)
$1
是对第一个捕获组的反向引用

JS代码:

original.replace(/rgb(.*?\d)\)/i, 'rgba$1, 1)')

使用组,如下所示:

/rgb(.*)\)/
这将在rgb和最后一个括号之间对所有内容进行分组。 然后,可以在替换表达式中重用该组:

.replace(/rgb(.*)\)/, 'rgba$1, 1')
测试:

a = 'rgb(250, 0, 0) 10px 10px 50px 0px'

a.replace(/rgb(.*)\)/i, 'rgba$1, 1)')
>"rgba(250, 0, 0, 1) 10px 10px 50px 0px"
其工作方式如下:

括号之间的表达式称为组,可以在替换表达式中使用$variables重用它

例如:

a = 'Hello, foo!'
a.replace(/(Hello)(.*)(foo)/, '$3$2$1')
> foo, Hello!
在本例中,组包括:

$1 : (Hello)
$2 : (.*)
$3 : (foo)
你可以根据自己的意愿更换它们


使用组,如下所示:

/rgb(.*)\)/
这将在rgb和最后一个括号之间对所有内容进行分组。 然后,可以在替换表达式中重用该组:

.replace(/rgb(.*)\)/, 'rgba$1, 1')
测试:

a = 'rgb(250, 0, 0) 10px 10px 50px 0px'

a.replace(/rgb(.*)\)/i, 'rgba$1, 1)')
>"rgba(250, 0, 0, 1) 10px 10px 50px 0px"
其工作方式如下:

括号之间的表达式称为组,可以在替换表达式中使用$variables重用它

例如:

a = 'Hello, foo!'
a.replace(/(Hello)(.*)(foo)/, '$3$2$1')
> foo, Hello!
在本例中,组包括:

$1 : (Hello)
$2 : (.*)
$3 : (foo)
你可以根据自己的意愿更换它们


您还可以将函数传递给replace方法。 像这样:

var _convertBoxShadowToTgba = function (boxShadow) {
        return boxShadow.replace(/rgb|\)/g, function($0) {
                 if ($0 == 'rgb') { return 'rgba';}
                 if($0 == ')') {return ', 1)';}
            });
 };
 var original = "rgb(250, 0, 0) 10px 10px 50px 0px";
 var final = _convertBoxShadowToTgba(original);
 console.log('original', original);
 console.log('final', final);

还可以将函数传递给replace方法。 像这样:

var _convertBoxShadowToTgba = function (boxShadow) {
        return boxShadow.replace(/rgb|\)/g, function($0) {
                 if ($0 == 'rgb') { return 'rgba';}
                 if($0 == ')') {return ', 1)';}
            });
 };
 var original = "rgb(250, 0, 0) 10px 10px 50px 0px";
 var final = _convertBoxShadowToTgba(original);
 console.log('original', original);
 console.log('final', final);

在简单的regexp问题上争夺rep的斗争是无止境的:)当两个答案在一瞬间意外发布时,改进一个以更好地理解解决方案比删除它要好@xShirase@revo我完全同意,这就是为什么解释和方法如此多样的原因。我经常在多个答案中找到有价值的信息。祝贺一篇伟大的帖子简单的regexp问题上的代表之争是无止境的:)当两个答案在一瞬间意外发布时,改进一个以促进更好地理解解决方案比删除它要好@xShirase@revo我完全同意,这就是为什么解释和方法如此多样的原因。我经常在多个答案中找到有价值的信息。祝贺你获得一个好职位