繁体   English   中英

Javascript 正则表达式替换字符如果前面和后面是一个字母

[英]Javascript regex replace character if preceded AND followed by a letter

基本上我正在使用一个字符串,它是一个 json 字符串,我想把它变成一个真正的 json (通过使用 JSON.parse())但是句子中间有一些引号。

示例:'{"author":"Jonah D"Almeida", ... }'(我想替换 D 和 Almeida 之间的那个)

由于整个句子周围已经有引号,javascript 给出错误,因为它无法从中创建 json 等,为了解决这个问题,基本上我想将句子中间的引号替换为 ' 但是仅当它在引号前后有字母时。

我的想法: myString.replace('letter before... "... letter after', "'")

知道我怎样才能得到正确的表达吗? 基本上我只想知道正则表达式检查是否在 " 引用之前和之后是否有字母。

OP ... “基本上我正在使用 json 字符串”

上面的示例不是 OP 所指的json string OP 的示例数据字符串已经无效 JSON。

因此,第一件事是修复生成此类数据的过程。

因为...

“解析有效的 JSON 数据将返回一个完全有效的 object,如果是 OP 的用例,还会返回一个正确转义的字符串值。”

... 证明...

 const testSample_A = { author: "Jonah D'Almeida" }; const testSample_B = { author: 'Jonah D"Almeida' }; const testSample_C = { author: 'Jonah D\'Almeida' }; const testSample_D = { author: "Jonah D\"Almeida" }; console.log({ testSample_A, testSample_B, testSample_C, testSample_D, }); console.log('JSON.stringify(...)... ', { testSample_A: JSON.stringify(testSample_A), testSample_B: JSON.stringify(testSample_B), testSample_C: JSON.stringify(testSample_C), testSample_D: JSON.stringify(testSample_D), }); console.log('JSON.parse(JSON.stringify(...))... ', { testSample_A: JSON.parse(JSON.stringify(testSample_A)), testSample_B: JSON.parse(JSON.stringify(testSample_B)), testSample_C: JSON.parse(JSON.stringify(testSample_C)), testSample_D: JSON.parse(JSON.stringify(testSample_D)), });
 .as-console-wrapper { min-height: 100%;important: top; 0; }

编辑

尽管如此,仍然可以基于正则表达式来实现完全遵循 OP 要求的清理任务,该正则表达式具有积极的 前瞻和积极的 后瞻......仅适用于基本拉丁语/(?<=\w)"(?=\w)/gm或更多国际化unicode 转义... /(?<=\p{L})"(?=\p{L})/gmu

 console.log('Letter unicode escapes...', ` {"author": "Jonah D"Almeida", ... } {"author": "Jon"ah D"Almeida", ... } {"author": "Jon"ah D"Alme"ida", ... }`.replace(/(?<=\p{L})"(?=\p{L})/gmu, '\\"') ); console.log('Basic Latin support...', ` {"author": "Jonah D"Almeida", ... } {"author": "Jon"ah D"Almeida", ... } {"author": "Jon"ah D"Alme"ida", ... }`.replace(/(?<=\w)"(?=\w)/gm, '\\"') ); console.log( 'sanitized and parsed string data...', JSON.parse(`[ { "author": "Jonah D"Almeida" }, { "author": "Jon"ah D"Almeida" }, { "author": "Jon"ah D"Alme"ida" } ]`.replace(/(?<=\p{L})"(?=\p{L})/gmu, '\\"')) );
 .as-console-wrapper { min-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM