【问题标题】:Regex remove quotes after and before certain characters正则表达式删除某些字符前后的引号
【发布时间】:2019-11-12 22:03:21
【问题描述】:

在将字符串解析为 JSON 之前,我需要从不需要的引号中清除字符串。该字符串看起来像一般的 JSON,有时在描述或其他字段中会有一些不需要的引号,例如

'{"description":"this is a long **"** description with strange quotes **"** like **"**","number":"111111111","quantity":"10","price":"5.20","unit":"ST **"** " }'

需要看起来像:

'{"description":"this is a long description with strange quotes like ","number":"111111111","quantity":"10","price":"5.20","unit":"ST" }'

我想出了以下正则表达式:

[\w\s\d](")[\w\s\d] 

一个问题是正则表达式也匹配不需要的引号之前和之后的字符。所以用一个简单的字符串替换字符也会被替换。这是不想要的。它看起来像:

"{"description":"this is a longescription with strange quotes " like "","number":"111111111","quantity":"10","price":"5.20","unit":"ST"" }"

另一个问题是,只有第一次匹配,而不是每一次匹配。

有人可以帮忙吗?

编辑: 解决了!正确的正则表达式是

([\w\s])"(?=\w|(?!\s*[\]}])\s)

并使用替换语句:

string.replace(/([\w\s])"(?=\w|(?!\s*[\]}])\s)/g, "$1");

【问题讨论】:

  • 你的做法可以表示为s.replace(/([\w\s])"(?=[\w\s])/g, '$1')
  • 试试这样:s.replace(/:\s*"(.*?)"(?=\s*[\]}])/g, function($0,$1) { return ':"' + $1.replace(/"/g, '') + '"'; })
  • 好吧,也许是s.replace(/([\w\s])"(?=\w|(?!\s*[\]}])\s)/g, '$1')
  • 这就是我不喜欢这种方法的原因。试试full field matching approach
  • 然后发布并选择作为工作答案

标签: javascript jquery regex regex-lookarounds


【解决方案1】:

一个问题是正则表达式也匹配不需要的引号前后的字符。所以用一个简单的字符串替换字符也会被替换。

使用'$1$3' 作为替换字符串以包括第一个(之前的字符)和第三个(之后的字符)捕获组。

另一个问题是,只有第一次匹配,而不是每一次匹配。

使用/g 正则表达式标志。

另外,请注意 \d 是多余的,因为 \w 包含数字。

我不确定* 是否实际上是您输入的一部分,或者您只是在使用它们来指示要删除的引号。鉴于您尝试的正则表达式和描述,我将假设后者。否则,只需将第二个正则表达式组中的 " 替换为 \**"\**

let s = '{"description":"this is a long " description with strange quotes " like "","number":"111111111","quantity":"10","price":"5.20","unit":"ST " " }'

let out = s.replace(/([\w\s"])(")(["\w\s])/g, '$1$3');

console.log(out);

【讨论】:

  • 感谢您的意见! * 对我来说是错误的格式。对不起 :)。您的正则表达式也可以正常工作,期望如果在描述末尾的双引号不会像“描述”一样被替换:“这是一个很长的“带有奇怪引号的描述”,比如“”仍然会被替换为“描述”: "这是一个很长的描述,带有奇怪的引号,例如 ""
  • 已更新以处理 ""case。 @WiktorStribiżew,这不起作用,您可以尝试一下,因为 "" 不会匹配 /"[\w\s]/无论您的组是否正在捕获或只是向前看等等。
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多