正则表达式 - 如何与字冒号之前更换词本身包裹成的双引号

问题描述 投票:2回答:3

我有一个“JSON”是这样的:

{
   example:"hi there",
   dateTime: "01/01/1970 bla:bla"
}

我结肠包裹他们一个双引号内前应全部更换价值。

指的这个响应qazxsw POI,我试过的代码,但还没有完全正确的,因为它的日期时间冒号前也改变了价值。

所以我应该添加到这个代码

Regex in ruby to enclose word before : with double quotes

另一种控制,至极看看这个词只是一个逗号后是。

我想改变,那么,“JSON”像这样一个真正的JSON:

(\w+)(?=:)

不喜欢这个像现在:

  {
       "example":"hi there",
       "dateTime": "01/01/1970 bla:bla"
    }
regex replace
3个回答
2
投票

这里是选择所有属性和更换(检查演示)的解决方案:

对于所有的情况下字母:

{
   "example":"hi there",
   "dateTime": "01/01/1970 "bla":bla"
}

字母数字和下划线:

/(?:[a-z]+(?=:[" ]))/ig

演示:

/(?:[\w]+(?=:[" ]))/g

https://www.regextester.com/?fam=107535使用不带回到引用创建组。因此,随着它并不一定要记住重用组运算速度。


1
投票

如果你可以依靠价值观的位置,在该行的开头来代替,如在你的榜样,您可以像使用?:正则表达式,仅匹配的字母数字字符序列和冒号前下划线和零个或多个空格前面和捕获序列作为第一组。

您可以看到使用^ +([a-zA-Z0-9_]*):什么是匹配/捕获的,什么是不适合你表明输入样本。

然后你可以使用捕捉组来包装你在双引号兴趣上的文字。

在JS简单运行的例子:

说明:var input = `{ example:"hi there", dateTime: "01/01/1970 bla:bla" }` var regexp = /^[ \t]+([a-zA-Z0-9_]*):/mg var replaced = input.replace(regexp, '"$1":') console.log(replaced)标记启用多比赛,m标志,可以匹配所有模式

我不能告诉你一个Ruby的例子,但所提供的regexpr应该可以帮助您!


0
投票

你的模式匹配g 1+字字符,其中右侧是一个冒号。这将匹配(\w+)(?=:)

你可能做的是延长该正向前查找匹配1+倍单词字符bla:然后用积极的前瞻主张是什么,右边是一个冒号后面跟一个双引号,匹配的是什么之间以及结束的双引号。

需要注意的是匹配的是除了任何数据结构和依赖于什么是对比赛的右侧。

然后,在更换你可以用引号之间的匹配。

\w+

匹配:

  • \w+(?=:\s*"[^"]+") 匹配1+单词字符
  • \w+正预测先行断言什么是正确的比赛 (?=匹配0+倍空白字符 \s*匹配使用从开口否定字符类将关闭报价,什么是之间。
  • *"[^"]*"关闭前瞻

) | Regex demo