javascript-字符串替换,将“ ^”替换为“”,将“ ^^”替换为“ ^”

时间:2019-06-22 04:58:58

标签: javascript regex replace

在JavaScript中删除临时转义字符...

基本示例:

我有以下字符串:

"[x^::^^y]"

输出应为:

"[x::^y]"

从本质上讲,应该删除所有不与另一个^相邻的^出现的地方,并且应该将^^出现的所有^替换为.parse("[^^x:^y^:^^^^^^]") // output: "[^x:y:^^^]" .parse("[^x:^^^^y^^^z]") // output: "[x:^^y^z]"

更多示例:

turtle.Terminator

这将是我正在开发的JSON替代方案的解析脚本的一部分,希望能减少内部存储文件的文件大小。

4 个答案:

答案 0 :(得分:6)

我将.replace()与这样的替换函数一起使用:

function parse (str) {
  return str.replace(/\^{1,2}/g, s => s.slice(1));
}

console.log(parse('[x^::^^y]'));
console.log(parse('[^^x:^y^:^^^^^^]'));
console.log(parse('[^x:^^^^y^^^z]'));

答案 1 :(得分:4)

另外一个想法:Capture一对^$1配对,或者不捕获其余replace with $1

function parse (s) {
  return s.replace(/(\^)\^|\^/g, '$1');
}

console.log(parse('[^x:^^^^y^^^z]'));

答案 2 :(得分:2)

由于替换调用将对整个字符串起作用,因此两个替换(如果一个接一个地执行)将相互干扰。不管替换的调用顺序如何,最终都会导致错误的结果。

解决此问题的唯一方法是使用中间状态。例如,如果我们将+用作中间符号,它将类似于:

  1. 用+,
  2. 替换^^
  3. 用空字符串替换^
  4. 然后,用^
  5. 替换+

显然+符号可能出现在原始字符串本身中,因此您需要选择一个不会出现在原始字符串中的更好的中间符号。它可以是多字符甚至是控制字符。

编辑:对于JS,使用替换功能的公认答案是更好的方法。万一有人用其他替代语言不可用的其他语言遇到类似问题,但我在这里留下了这个答案。

答案 3 :(得分:2)

以上都是很好的答案!

但是另一种可能的方法是使用先行和后行。

function replace_carets(mystring) {
  return mystring
    .replace(/(?<!\^)(\^{2})*\^(?!\^)/g, "$1") //removes isolated ^ or last odd numbered ^
    .replace(/\^{2}/g, "^"); //replaces ^^ with ^
}
console.log(replace_carets("[x^::^^y]"));
console.log(replace_carets("[^^x:^y^:^^^^^^]"));
console.log(replace_carets("[^x:^^^^y^^^z]"));

远离优雅,但我挑战自我,或者与他人分享。