如何用正则表达式替换字符串

Posted

技术标签:

【中文标题】如何用正则表达式替换字符串【英文标题】:How to replace string by regex 【发布时间】:2021-10-07 01:06:48 【问题描述】:

我想从以下位置替换一个 json 字符串:

["id":151,"name":"me", "id":4567432,"name":"you"]

到:

["id":"151","name":"me", "id":"4567432","name":"you"]

如您所见,我只想在 id 的值(某个数字)中添加括号。

我试过了:

json = json.replaceAll("\"id\",([0-9]+)", "\"id\",\"$1\"");

但它不起作用。我该怎么做?

【问题讨论】:

"...我只想加括号..." 它们是双引号,不是括号。 【参考方案1】:

您使用逗号作为键值分隔符,但在示例字符串中,您有一个冒号。

如果你使用,你可以修复 replaceAll 方法

replaceAll("(\"id\":)([0-9]+)", "$1\"$2\"")

请参阅online regex demo。

详情

(\"id\":) - 第 1 组 ($1):"id": 字符串 ([0-9]+) - 第 2 组 ($2):一位或多位数字

【讨论】:

哇,完美!国王! :)【参考方案2】:

带有js代码

// #js code

const data = ["id":151,"name":"me", "id":4567432,"name":"you"];

function solve1(data) 
  // solution 1
  // with stringify data
  const getMatches = data.match(/\"id\"\:\d+\,/gi);
  getMatches?.forEach((theMatch)=>
    const getNumbers = theMatch.match(/\d+/gi).join("");
    const newMatch = theMatch.replace(getNumbers,`"$getNumbers"`);
    data = data.replace(theMatch,newMatch)
  )
  return data;

function solve2(data) 

  // solution 2
  // with json data
  return data.map((item)=>
    item.id = item.id.toString(); 
    return item;
  )

console.log(solve1(JSON.stringify(data)));
console.log(solve2(data))

【讨论】:

以上是关于如何用正则表达式替换字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何用元组列表替换列表中正则表达式匹配的模式?

如何用正则表达式获取cookie

如何用正则表达式把括号连同中括号里的字符去掉

Oracle中如何用正则表达式检测某个字段是不是带有日文字符

java字符串里面如何用正则表达式去掉汉字?

如何用excel中的VBA的正则表达式提取出字符串?