regex 使用正则表达式在JSON中替换字符串以忽略对象键[已关闭]

chy5wohz  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(144)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

7天前关闭。
此帖子已在7天前编辑并提交审核,无法重新打开:
原始关闭原因未解决
Improve this question
我有这个JSON:

{
  "agent": "Teste",
  "obs": "obs 2 in other obs",
  "id": 4,
  "queue": "Suply",
  "name": "Other"
}

我需要一个正则表达式来生成这个JSON:

{
  "agent": "Teste",
  "obs": "<b>obs</b> 2 in other <b>obs</b>",
  "id": 4,
  "queue": "Suply",
  "name": "Other"
}

替换失败,因为密钥"obs":也被替换了。

pod7payv

pod7payv1#

您可以使用以下正则表达式:

/obs(?!":)/g

它使用负lookaheadAssert。

const json = JSON.stringify({"agent": "Teste","obs": "obs 2 in other obs","id": 4,"queue": "Suply","name":"Other"})

console.log(json.replace(/(obs)(?!":)/g, '<b>$1</b>'))
alen0pnh

alen0pnh2#

这使用了一个具有2个捕获组的正则表达式。第一个捕获组被替换为前后的和。然后替换第二个捕获组。因为第二个捕获组不包括冒号,所以键没有改变。有两个句点字符,其中一个用于考虑JSONStringify()引入的正斜杠,另一个用于键后的引号。

const JSONString = JSON.stringify('{"agent": "Teste","obs": "obs 2 in other obs","id": 4,"queue": "Suply","name":"Other"}');

const re = /(obs)(..[^:])/g;

let newJSONString = JSONString.replace(re, '<b>$1</b>$2');

newObject = JSON.parse(newJSONString);

console.log(newObject);

相关问题