正则表达式匹配文本中的简单json

时间:2018-01-28 21:24:20

标签: javascript json regex

我没有编写一个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

在编辑器中突出显示此模式后的文本

2 个答案:

答案 0 :(得分:2)

Don't

将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());