javascript - 替换字符串的一个字符
问题描述
我有一个看起来像这样的字符串:[TITLE|prefix=a]
.
从该字符串中,文本|prefix=a
是动态的。所以它可以是任何东西,也可以是空的。我想用 . 替换(在这种情况下[TITLE|prefix=a]
)[TITLE|prefix=a|suffix=z]
。
所以这个想法是]
从一个以 . 开头的字符串替换[TITLE with |suffix=z]
。
例如,如果字符串是[TITLE|prefix=a]
,则应将其替换为[TITLE|prefix=a|suffix=z]
。如果是[TITLE]
,则应将其替换为[TITLE|suffix=z]
,依此类推。
我怎样才能用正则表达式做到这一点?
我已经尝试过这种方式,但它给出了一个错误:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
const x = 'TITLE';
const regex = new RegExp(`([${x})*]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");
console.log(str);
我也尝试过用 [ 和 ] 转义字符,new RegExp(`(\[${x})*\]`, 'gi');
但这并没有帮助。
解决方案
您需要记住\\
在常规字符串文字中使用来定义单个文字反斜杠。
然后,你需要一个像
/(\[TITLE(?:\|[^\][]*)?)]/gi
请参阅正则表达式演示。细节:
(\[TITLE\|[^\][]*)
- 捕获组 1:\[TITLE
-[TITLE
文字(?:\|[^\][]*)?
- 一个可选出现的|
字符后跟 0 个或多个字符,除了]
and[
]
- 一个]
字符。
在您的 JavaScript 代码中,使用以下内容定义动态模式:
const regex = new RegExp(`(\\[${x}\\|[^\\][]*)]`, 'gi');
参见 JS 演示:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur] [TITLE]';
const x = 'TITLE';
const regex = new RegExp(`(\\[${x}(?:\\|[^\\][]*)?)]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");
console.log(str);
// => Lorem ipsum [TITLE|prefix=a|suffix=z] dolor [sit] amet [consectetur]
推荐阅读
- gradle - 我如何使用 cmd 或 gitbash 对 gradle 项目进行简单刷新
- grpc - 带有版本字段的 gRPC 消息请求版本控制
- sql - 那是多对多的sql关系吗?
- python-3.x - 查找所有 1 的最大子矩阵 - 缺少参数错误
- javascript - 我的变量更改了它设置为的变量的值
- python - 循环开始月份和开始年份到结束月份和年份python
- c# - 将 Unity C# 代码与“普通”C# 代码分离
- mysql - Mariadb 服务器不断崩溃 [错误 2013]
- c++ - 如何使用返回布尔值的函数?
- vue.js - 如何使用 Sinon.js (vue) 存根/模拟返回值以测试我的方法