首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中用大写替换正则表达式捕获组

在Javascript中用大写替换正则表达式捕获组
EN

Stack Overflow用户
提问于 2011-05-27 01:51:48
回答 2查看 61.3K关注 0票数 93

我想知道如何在JavaScript中用大写替换捕获组。这是我到目前为止尝试的一个简化版本,但不起作用:

代码语言:javascript
复制
> a="foobar"
'foobar'
> a.replace( /(f)/, "$1".toUpperCase() )
'foobar'
> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )
'foobar'

你能解释一下这段代码有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2018-02-27 01:34:09

旧帖子,但值得将@ChaosPandion answer扩展到其他具有更多限制RegEx的用例。例如,确保使用特定格式的/z(f)oo/包围(f)或捕获组

代码语言:javascript
复制
> a="foobazfoobar"
'foobazfoobar'
> a.replace(/z(f)oo/, function($0,$1) {return $0.replace($1, $1.toUpperCase());})
'foobazFoobar'
// Improve the RegEx so `(f)` will only get replaced when it begins with a dot or new line, etc.

我只想强调一下function的两个参数,这两个参数使得查找特定格式和替换格式中的捕获组成为可能。

票数 12
EN

Stack Overflow用户

发布于 2019-02-24 07:38:37

给定一个属性、值的字典(对象,在本例中是一个Map),并使用.bind(),如答案部分所述

代码语言:javascript
复制
const regex = /([A-z0-9]+)/;
const dictionary = new Map([["hello", 123]]); 
let str = "hello";
str = str.replace(regex, dictionary.get.bind(dictionary));

console.log(str);

使用JavaScript普通对象,并定义函数以获取该对象的返回匹配属性值,如果未找到匹配,则返回原始字符串

代码语言:javascript
复制
const regex = /([A-z0-9]+)/;
const dictionary = {
  "hello": 123,
  [Symbol("dictionary")](prop) {
    return this[prop] || prop
  }
};
let str = "hello";
str = str.replace(regex, dictionary[Object.getOwnPropertySymbols(dictionary)[0]].bind(dictionary));

console.log(str);

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

https://stackoverflow.com/questions/6142922

复制
相关文章

相似问题

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