【发布时间】:2021-09-26 04:11:30
【问题描述】:
我有一个很长的字符串,我必须以特定的方式对其进行操作。该字符串可以包含导致我的代码出现问题的其他子字符串。出于这个原因,在对字符串进行任何操作之前,我将所有子字符串(由" 引入并以非转义" 结尾的任何内容)替换为以下格式的占位符:$0, $1, $2, ..., $n。我确定主字符串本身不包含字符$,但子字符串之一(或更多)可能是例如"$0"。
现在的问题是:在操作/格式化主字符串之后,我需要再次用它们的实际值替换所有占位符。
方便我将它们保存为这种格式:
// TypeScript
let substrings: { placeholderName: string; value: string }[];
但是这样做:
// JavaScript
let mainString1 = "main string $0 $1";
let mainString2 = "main string $0 $1";
let substrings = [
{ placeholderName: "$0", value: "test1 $1" },
{ placeholderName: "$1", value: "test2" }
];
for (const substr of substrings) {
mainString1 = mainString1.replace(substr.placeholderName, substr.value);
mainString2 = mainString2.replaceAll(substr.placeholderName, substr.value);
}
console.log(mainString1); // expected result: "main string test1 test2 $1"
console.log(mainString2); // expected result: "main string test1 test2 test2"
// wanted result: "main string test1 $1 test2"
不是一个选项,因为 子字符串 可能包含 $x,这将替换错误的内容(.replace() 和 .replaceAll())。
获取子字符串是使用正则表达式存档的,也许正则表达式在这里也可以提供帮助?虽然我无法控制子字符串中保存的内容...
【问题讨论】:
-
您确定要
main string test1 $1 test2而不是main string test1 test2或main string test1 $1 -
是的,100% 确定..
-
当然,我现在完全明白了。我问的时候是凌晨 4 点:D
-
您可以控制占位符吗?他们会一直是
$x吗? -
太好了,现在应该一切都好!
标签: javascript regex string replace jsonplaceholder