我没有编写一个reg exp来捕捉{ key: something }
something
所有出现的事情,其中}
可以是除或
{ key: [^}]* }
{ key: [^} ]* }
{ key: (.*?)({| ) }
{ key: (.*?)({) }
{ key: (?!.*({| )) }
{ key: (?!.*({)) }
之外的任何内容。我试过了
const pattern = '{ key: [^}]* }';
const regExp = new RegExp(pattern, 'igm');
let match = true;
do {
match = regExp.exec(text);
if (match) {
// use result
}
} while (match);
其中第一个有时,而不是根据我能看到的任何模式。我在javascript中使用这些:
regExp.lastIndex = 0;
(我还尝试添加regExp = null
,并在循环中设置kjh { key: sfdg } lkk { key: a }
并重新定义。
但是,我不认为它(仅)是一个javascript问题;他们不会在online regexp tester上工作。
我需要角色指数;作为一个例子,我想
{{1}}
产生(5,13)和(23,10)(可能有一些错误出现在那里)
有什么建议吗?
编辑:如果相关,用例是使用draft.js
在编辑器中突出显示此模式后的文本答案 0 :(得分:2)
将JSON解析为JSON.parse
的对象,以编程方式找到密钥。
kjh { key: sfdg } lkk { key: a }
这也是无效的JSON。如果这是来自服务器的一些数据,请以一些正确的数据传输格式(即XML,YAML, JSON )提供,而不是一些任意的无结构字符串。
答案 1 :(得分:0)
要匹配JSON
的值,您可以将对象转换为有效的JSON
匹配由双引号括起来的属性,后跟:
和任何字符,然后关闭}
另见
var o = {key:123};
var json = JSON.stringify(o);
var prop = `"key":`;
var re = new RegExp(`${prop}.+(?=})`);
console.log(json.match(re)[0].split(new RegExp(prop)).pop());