regex 怎么找到所有 ‘起始标记’-‘变量’-‘终结标记’?

2022-05-26 23:39:40 +08:00
 franklioxygen
举个栗子,我有一个字符串

“user”:{"id":"123", "username":"foo", "age":"18" },{"id":"124", "username":"bar", "age":"24" },...

怎么找到所有的 从 username 到第一个逗号 "username":"...", ?
905 次点击
所在节点    问与答
6 条回复
lmqdlr
2022-05-27 00:43:14 +08:00
非贪婪模式,全局匹配就好了呀。你是要用什么语言,这个示例的话,序列化成 JSON 更简单吧
franklioxygen
2022-05-27 01:09:46 +08:00
@lmqdlr 我目标是从 json 里面替换掉一个特定 key 的每一个 value ,这个特定 key 可能在很多层里有。用的是 javascript 。之前写了个递归函数遍历所有节点生成了 path ,不过比较复杂,想着用 regex 可能省几行逻辑
f0rger
2022-05-27 08:54:24 +08:00
@franklioxygen 你 mdn 搜一下 JSON.parse ,注意看第二个参数是个 function ,原生 API 就可以满足你的要求
des
2022-05-27 09:14:15 +08:00
你这算邪道路子,json 里面要多几个空格换行什么的,你这不就跑不通了
我看你这举的例子,path 是固定的,那直接记录 path ,按 path 取不好吗?
GuuJiang
2022-05-27 09:38:53 +08:00
用合适的工具去做合适的事,既然是 json 结构,就要用 json 的方式去处理,使用正则表达式属于歪门邪道,会有很多很多的特殊情况,比如 value 里面有个转义过的双引号怎么办,就算你不断地针对每一种特殊情况去打补丁,最后这个正则表达式也会变得复杂无比
franklioxygen
2022-05-27 10:25:53 +08:00
@f0rger 这就学习一下,谢谢!
@des path 不固定,这个 key 会在不同层级出现
@GuuJiang 确实,如果有其他字符会产生问题。我目前的目标 value 是只有字母,如果要覆盖更多情况的话就不好写了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855553

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX