我没能写出一个 reg exp 来捕获 { key: something }
的所有出现,其中 something
可以是 以外的任何东西
或 。我试过了
{ key: [^}]* }
{ key: [^} ]* }
{ key: (.*?)({| ) }
{ key: (.*?)({) }
{ key: (?!.*({| )) }
{ key: (?!.*({)) }
其中第一个有时有效,但不是根据我能看到的任何模式。我在 javascript 中使用这些:
const pattern = '{ key: [^}]* }';
const regExp = new RegExp(pattern, 'igm');
let match = true;
do {
match = regExp.exec(text);
if (match) {
// use result
}
} while (match);
(我还尝试在循环中添加 regExp.lastIndex = 0;
,并设置 regExp = null
并重新定义)。
但是我不认为这是(仅)javascript 问题;它们在 online regexp tester 上也不起作用.
我需要字符索引;举个例子,我想
kjh { key: sfdg } lkk { key: a }
产生 (5, 13) 和 (23, 10)(可能有一些误差)
有什么建议吗?
编辑:如果相关,用例是在编辑器中使用 draft.js 突出显示遵循此模式的文本
最佳答案
Don't .
使用 JSON.parse
将 JSON 解析为对象,以编程方式找到 key 。
kjh { key: sfdg } lkk { key: a }
这也不是有效的 JSON。如果这是来自服务器的一些数据,请以某种正确的数据传输格式(即 XML、YAML、JSON)提供它,而不是某种任意的、无结构的字符串。
关于javascript - 正则表达式匹配文本中的简单 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48491481/