首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript - string正则表达式反向引用

JavaScript - string正则表达式反向引用
EN

Stack Overflow用户
提问于 2010-03-15 22:44:32
回答 4查看 51.2K关注 0票数 97

您可以在JavaScript中像这样进行反向引用:

代码语言:javascript
复制
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");

这将(相当愚蠢地)将"$test“替换为"test”。但想象一下,我想要将结果字符串$2传递给一个函数,该函数返回另一个值。我试过这样做,但得到的不是字符串"test",而是"$2“。有没有办法做到这一点?

代码语言:javascript
复制
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-15 22:51:49

如下所示:

代码语言:javascript
复制
str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
票数 124
EN

Stack Overflow用户

发布于 2010-03-15 22:52:29

将函数作为第二个参数传递给replace

代码语言:javascript
复制
str = str.replace(/(\$)([a-z]+)/gi, myReplace);

function myReplace(str, group1, group2) {
    return "+" + group2 + "+";
}

根据mozilla.org的说法,这种能力从Javascript1.3开始就已经存在了。

票数 36
EN

Stack Overflow用户

发布于 2018-06-09 02:54:24

使用ESNext,相当于一个虚拟链接的替代品,但只是为了展示它是如何工作的:

代码语言:javascript
复制
let text = 'Visit http://lovecats.com/new-posts/ and https://lovedogs.com/best-dogs NOW !';

text = text.replace(/(https?:\/\/[^ ]+)/g, (match, link) => {
  // remove ending slash if there is one
  link = link.replace(/\/?$/, '');
  
  return `<a href="${link}" target="_blank">${link.substr(link.lastIndexOf('/') +1)}</a>`;
});

document.body.innerHTML = text;

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

https://stackoverflow.com/questions/2447915

复制
相关文章

相似问题

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