怎么通过正则表达式提取特定字符

例如const value = "{id:1} - {id:3} + change({id:4})"。我只想將'{id:1}'和' {id:3}'提取出來

阅读 2.9k
5 个回答
"{id:1} - {id:3} + change({id:4})".match(/\{id:[^4]\}/g)
// ['{id:1}', '{id:3}']

value.match(/\{([^\}]*)\}/g)
log ['{id:1}', '{id:3}', '{id:4}']

对应提取的正则基本形态可能是:

const RE=/^\s*({id:\d+})\s*-\s*({id:\d+})/

在捕获子组中就是第1和第2个子组

最后一个id:4 的排出条件不太明确,如果你确定取的是前两个,split 方法更清晰。正则的排出条件需要再明确一点,我用 )排出 最后一个 id:4 的项,不知道你能否用得上。

let str = "{id:1} - {id:3} + change({id:4})";
// 非正则
let res = str.split(/[-\+]/).map(item=>{
  return item.trim();
});
console.log(res)
//['{id:1}', '{id:3}', 'change({id:4})']
//  正则方法 
let res2 = str.match(/\{id:\d\}(?![\)])/g);
console.log(res2)
// ['{id:1}', '{id:3}']

如果有帮助,请采纳!

看了楼上几个回答,不通用,或者不能覆盖边界情况,比如
value = "{id:1} - {id:3} + change({id:4}) - {id: 5}"
下面是完善后的正则,可以参考一下

value.match(/(?<=[^(]|^){.*?}(?=[^)]|$)/g)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题