Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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_Replace - Fatal编程技术网

Javascript字符串替换方法。在替换字符串中使用匹配项

Javascript字符串替换方法。在替换字符串中使用匹配项,javascript,regex,replace,Javascript,Regex,Replace,我有以下javascript字符串 /Library/Application%20Support/Adobe/Fireworks%20CS6/Commands “CS#”部分中的数字可能会更改,但我想将字符串转换为以下格式,记住数字可能会更改 /Library/Caches/Adobe/TypeSupport/CS6 我知道我可以用几种方法做到这一点,但为了教育的目的,我正在寻找最好的方法 我可以使用replace方法使用正则表达式进行搜索,但是可以在替换中使用匹配项吗 感谢您的帮助当然可以

我有以下javascript字符串

/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands
“CS#”部分中的数字可能会更改,但我想将字符串转换为以下格式,记住数字可能会更改

/Library/Caches/Adobe/TypeSupport/CS6
我知道我可以用几种方法做到这一点,但为了教育的目的,我正在寻找最好的方法

我可以使用replace方法使用正则表达式进行搜索,但是可以在替换中使用匹配项吗

感谢您的帮助

当然可以:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(/.*(CS[0-9]+).*/, '/Library/Caches/Adobe/TypeSupport/$1');
您可以使用
$N
引用捕获组,其中
N
是组的索引(从1开始)。

确定:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(/.*(CS[0-9]+).*/, '/Library/Caches/Adobe/TypeSupport/$1');

您可以使用
$N
引用捕获组,其中
N
是组的索引(从1开始)。

最简单的解决方案是在正则表达式中使用括号来捕获您希望在替换中使用的原始字符串的一部分,然后通过特殊序列
$1
将其包含在替换字符串中。例如:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
    /^.*\/(CS[0-9]+).*$/, 
    '/Library/Caches/Adobe/TypeSupport/$1'); 
// => /Library/Caches/Adobe/TypeSupport/CS6
(您可以有多组括号,在这种情况下,后续组是
$2
$3
,等等。有时您关心的字符串恰好与整个正则表达式匹配,在这种情况下,您只需在替换字符串中使用
$&
,而不需要任何括号。)

这对于简单地包含源字符串中的文本非常有用,就像您正在做的那样

但是,如果您正在做一些更为花哨的事情,例如尝试更改匹配文本的大小写,那么它将不起作用。(
“$1”.toLowerCase()
将把文本字符串“$1”转换成小写,然后再将其传递给
replace
;没有帮助。)对于这些情况,可以使用函数而不是字符串作为替换。每次匹配将调用一次,并传递匹配的字符串部分(相当于字符串版本中的
$&
);如果正则表达式中有括号,则将按顺序向其传递一个包含每个组匹配项的附加参数。因此,您可以将示例转换为小写形式,如下所示:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
        /^.*\/(CS[0-9]+).*$/, 
        function(whole_match, cs_number) { 
          return "/Library/Caches/Adobe/type_support/" + cs_number.toLowerCase()
        });  
// => /Library/Caches/Adobe/type_support/cs6

您可以阅读Mozilla规范/文档。

最简单的解决方案是在正则表达式中使用括号来捕获您希望在替换中使用的原始字符串部分,然后通过特殊序列
$1
将其包含在替换字符串中。例如:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
    /^.*\/(CS[0-9]+).*$/, 
    '/Library/Caches/Adobe/TypeSupport/$1'); 
// => /Library/Caches/Adobe/TypeSupport/CS6
(您可以有多组括号,在这种情况下,后续组是
$2
$3
,等等。有时您关心的字符串恰好与整个正则表达式匹配,在这种情况下,您只需在替换字符串中使用
$&
,而不需要任何括号。)

这对于简单地包含源字符串中的文本非常有用,就像您正在做的那样

但是,如果您正在做一些更为花哨的事情,例如尝试更改匹配文本的大小写,那么它将不起作用。(
“$1”.toLowerCase()
将把文本字符串“$1”转换成小写,然后再将其传递给
replace
;没有帮助。)对于这些情况,可以使用函数而不是字符串作为替换。每次匹配将调用一次,并传递匹配的字符串部分(相当于字符串版本中的
$&
);如果正则表达式中有括号,则将按顺序向其传递一个包含每个组匹配项的附加参数。因此,您可以将示例转换为小写形式,如下所示:

'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
        /^.*\/(CS[0-9]+).*$/, 
        function(whole_match, cs_number) { 
          return "/Library/Caches/Adobe/type_support/" + cs_number.toLowerCase()
        });  
// => /Library/Caches/Adobe/type_support/cs6

您可以阅读Mozilla规范/文档。

关闭。在Javascript中,它是
$1
,而不是
\1
@MarkReed-Fixed。奇怪的是,我以前肯定已经成功地使用了\1。。。必须用另一种语言。õo
\1
是我熟悉的所有正则表达式风格中的反向引用(指向模式中第一个括号中的组)。这可能就是你所记得的吗?接近。在Javascript中,它是
$1
,而不是
\1
@MarkReed-Fixed。奇怪的是,我以前肯定已经成功地使用了\1。。。必须用另一种语言。õo
\1
是我熟悉的所有正则表达式风格中的反向引用(指向模式中第一个括号中的组)。这可能就是你所记得的吗?“有可能在替换中使用匹配项吗”-当然。您可以捕获子匹配并使用
$1
$2
等引用它们,或者指定回调函数以返回替换文本,回调将在其中接收匹配作为参数。更多信息请访问。在您的示例中,有多少输出字符串是硬编码的,有多少来自输入?(显然,
CS6
是可变的,但是
Library/
/Adobe/
呢?)“是否可以在替换中使用匹配项”-当然可以。您可以捕获子匹配并使用
$1
$2
等引用它们,或者指定回调函数以返回替换文本,回调将在其中接收匹配作为参数。更多信息请访问。在您的示例中,有多少输出字符串是硬编码的,有多少来自输入?(显然,
CS6
是可变的,但是
Library/
/Adobe/
呢?)