【问题标题】:How to find all instances of a pattern with regex or regexp in javascript如何在javascript中使用正则表达式或正则表达式查找模式的所有实例
【发布时间】:2019-09-06 00:48:30
【问题描述】:

我有这个字符串

{ prop1: 'val1', prop2:{ prop3: 'val3' ,  messages: {something:'val'}  messages: { something:'val2', x : {x : 1, y : 5} } } , prop4: 'val4' }

如何使用 xregexp(或其他解决方案)在 javascript 中找到 messages: { ... } 的所有实例

这个/messages: (\{(?>[^{}]+|(?1))*\})/g 在 php 中工作,但不在 javascript 中

使用xregexprecursion http://xregexp.com/api/#matchRecursive也想不通

试过https://repl.it/@RezaRahmati/xregexp

XRegExp.matchRecursive(str, 'messages: {', '}', 'gi')

但得到Unbalanced delimiter found in string 错误

更新

作为@vs97 和@barmar 的评论,我尝试了messages: (\{.+\}) 并在多行上工作,当它是单行时仍然存在问题

【问题讨论】:

  • 就这么简单? 消息:(\{.+\}) regex101.com/r/Fs4SAq/1
  • 消息是在 regex101.com 中的不同行,还是像问题中的单行?
  • Javascript doesn't natively support recursive regex 但您也许可以使用library that does。否则,我会说您应该制作/使用简单的解析器,因为这种类似 JSON 的结构看起来不像常规语言。特别是如果您的格式不依赖空格来分隔行并且只有 {} 很重要。
  • @Khauri 这个问题说他试图使用那个库。
  • 我无法阅读。但在那种情况下,我认为很高兴看到 OP 尝试过的代码。

标签: javascript regex xregexp


【解决方案1】:

不幸的是,matchBalanced() 对此没有用处,因为:

如果数据中的分隔符不平衡,则会引发错误。

所以你不能只用它来查找字符串的平衡部分,你只能将它用于预期平衡的数据——它返回最外层的子字符串。由于您要查找的是嵌套在内部的平衡部分,因此它不会返回它们。

【讨论】:

  • 感谢您的回答,它解释了为什么我的正则表达式不起作用,但我的问题仍然没有解决
  • 查看我答案的最后一行,它说明了如何将其与其他代码结合起来解决问题。
  • 如何使用正则表达式找到messages: 的每个实例?
  • 简单:/messages:/g
  • 对不起,我很困惑,那会找到messages: 那么我怎么知道那个messages: 的字符串有多远,如果我发现为什么我需要做那个匹配recusive,请您添加一些有关解决方案的伪代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多