如何替换/删除字符串的某些部分

时间:2020-02-18 09:17:01

标签: javascript angular

我有一个要删除其中一部分的字符串。

1)下面是字符串(加密的消息)

@@ _ / profiles / c3ed4acd-b3be-487e-81b4-a27643745d ^^ ____ User1 __ @@@ ^^^^向@@ _ / profiles / d3ac3c5a-8a9f- 4640-8563-127674d93e ^^ ____ User2 __ @@@@ ^^^

我想从这件事中总结出以下两点

a)字符串

@ User1对@ User2说

2)像这样的json对象

{
        "c3ed4acd-b3be-487e-81b4-a27643745d":"User1",
        "d3ac3c5a-8a9f-4640-8563-127674d93e":"User2"
}

首先,我尝试获取字符串,并使用以下使用正则表达式的方法

我已经这样尝试过了

var str = "@@___/profiles/c3ed4acd-b3be-487e-81b4-a27643745d__^^____User1__@@@^^^ says to @@___/profiles/d3ac3c5a-8a9f-4640-8563-127674d93e__^^____User2__@@@^^^"
var rx = /(^@@___|,@@@^^^)/;  // start with @@___ and end with @@@^^^
var expectedString = str.replace(/(^@@___|,@@@^^^)/g, "");
console.log(expectedString);

但这只是替换

的首次出现

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些基本问题

  • 您必须将^字符转义为\^
  • 您甚至都不使用rx变量
  • 竖线字符|表示或不以开头和结尾

尝试一下:

// a)
var str = "@@___/profiles/c3ed4acd-b3be-487e-81b4-a27643745d__^^____User1__@@@^^^ says to @@___/profiles/d3ac3c5a-8a9f-4640-8563-127674d93e__^^____User2__@@@^^^"
var rx = /@@___([^_]+)__\^\^____([^_]+)__@@@\^\^\^/g;  
var expectedString = str.replace(rx, "@$2");
console.log(expectedString);


// b)
var list = {};
while ((m = rx.exec(str)) !== null) {
  if (m.index === rx.lastIndex) {
    rx.lastIndex++;
  }
  list[m[1]] = m[2];
}
console.log(list);