首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript字符串替换方法。在替换字符串中使用匹配

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

Stack Overflow用户
提问于 2012-11-15 10:28:38
回答 2查看 194关注 0票数 0

我有以下javascript字符串

代码语言:javascript
复制
/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands

"CS#“部分中的数字可能会更改,但我希望将字符串转换为以下格式,请记住数字可能会更改。

代码语言:javascript
复制
/Library/Caches/Adobe/TypeSupport/CS6

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

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

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-15 10:38:49

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

代码语言:javascript
复制
'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
    /^.*\/(CS[0-9]+).*$/, 
    '/Library/Caches/Adobe/TypeSupport/$1'); 
// => /Library/Caches/Adobe/TypeSupport/CS6

(您可以有多组括号,在这种情况下,后续的组是$2$3等。有时您关心的字符串恰好与整个正则表达式完全匹配,在这种情况下,您只需在替换字符串中使用$&,而不需要任何括号。)

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

但是,如果您正在执行任何更花哨的操作-例如尝试更改匹配文本的大小写-它将不起作用。(在传递给replace之前,'$1'.toLowerCase()只会将文字字符串'$1‘转换为小写;这没有什么帮助。)对于这些情况,您可以使用函数代替字符串作为替代。它将在每次匹配时调用一次,并传递匹配的字符串部分(相当于字符串版本中的$& );如果正则表达式中有括号,将按顺序传递一个包含每个组的匹配的附加参数。因此,您可以将示例转换为小写,如下所示:

代码语言:javascript
复制
'/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规范/文档here

票数 3
EN

Stack Overflow用户

发布于 2012-11-15 10:31:18

当然:

代码语言:javascript
复制
'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(/.*(CS[0-9]+).*/, '/Library/Caches/Adobe/TypeSupport/$1');

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13390724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档