想找人帮忙。我需要匹配{}方括号之间的所有双引号。然后我将转义这些双引号。
(37, "2012 Fall", null, null, 0, 1, "1420", {"canDelete":false, "cantDeleteModes":[2, 3, 5]}, "2020-05-28T18:06:48.000Z", "2020-10-27T19:42:03.000Z", 1, 1);
这是我到目前为止的reqex。
/(?<=\{).*?(?=\})/g
但它匹配{}括号之间的所有内容。
预期输出...
(37, "2012 Fall", null, null, 0, 1, "1420", {\"canDelete\":false, \"cantDeleteModes\":[2, 3, 5]}, "2020-05-28T18:06:48.000Z", "2020-10-27T19:42:03.000Z", 1, 1);
任何帮助将不胜感激;=)
3条答案
按热度按时间hc8w905p1#
这段代码应该让你开始:
说明
/{(.*)}/
非延迟地匹配方括号之间的所有内容{}
input.match(regex)[1]
-返回第一个匹配的字符串备注:
这是我最容易写和理解的解决方案。如果你需要一些更高性能的东西,一种可能的方法是迭代字符串的字符,注意任何
{}
方括号,只有当之前看到左方括号但没有右方括号时才替换引号(并跟踪多个左方括号和右方括号,以便注意开始。所以你需要某种“级别”计数器,它根据开括号和闭括号的出现而增加和减少)。brgchamk2#
如果你想匹配canDelete和cantDeleteModes,你可以做得比正则表达式更好
oiopk7p53#
解析JSON应该使用
JSON.parse
来完成,但是对于regexp,您可以使用regexpAssert和RegExp::exec
来增量搜索字符串。请注意,我们在匹配中包含引号,因为我们想在下一个exec
中跳过它们。额外的regexp组帮助我们得到不带引号的结果。但是这个解决方案是脆弱的,因为如果你把花括号放在你的字符串里面,它可能会失败。如果源字符串不符合JSON,那么更好的选择是编写自己的解析器。