匹配对象属性,它是使用正则表达式在字符串中的对象

时间:2017-08-25 16:22:56

标签: javascript regex

对于如下字符串:

`const someConst= {
name: 'someName',
someProp: {
    somePropOfSomeProp: 'value'
}};`

我如何匹配someProp的值?

假设:

  • 属性名称始终为someProp
  • 属性值始终为object
  • 类型
  • someProp对象不能有嵌套对象。它将是平的。

我正在使用Javascript正则表达式来解决这个问题。

someProp所期望的结构类型提供更多上下文。这基本上应该是角度组件的bindings属性。因此预期值可能如下:

bindings: {
someBinding: '=',
someOtherBinding: '@'
}

bindings的道具可能不在同一条线上。所以他们可能是:

bindings: { someBinding: '=', someOtherBinding: '@' }

基本上我需要:

{
    someBinding: '=',
    someOtherBinding: '@'
}

2 个答案:

答案 0 :(得分:1)

要使用正则表达式来获取问题中的特定要求,可以使用:

/(?!bindings\s*:\s*)(?:\{[^}]*\})/

Regex101 DEMO

它在属性名称和冒号上使用负向前瞻,因此它不包含在结果中。

但是,此正则表达式假定在用于终止对象的字符之前根本没有}字符。因此,如果该对象中的某个地方有一个包含}的字符串,它就会中断。

在扩展讨论中,您询问了如何获取完整对象。这更复杂,并且表明使用像Esprima这样的JS解析器很可能是一个更好,更可靠的解决方案。

答案 1 :(得分:0)

这个正则表达式匹配整个对象,包括名称someProp:

/someProp: {\n\s*somePropOfSomeProp\:.*\n}/g

使用括号创建一个捕获组,您可以使用该捕获组来微调您要使用的内容。例如:

/someProp: ({\n\s*somePropOfSomeProp\:.*\n})/g

一些警告:如果值字符串也包含somePropOfSomeProp:,可能会失败,我没有测试足够的情况。或者,如果值在几行上。

您可以在https://regex101.com/r/AE2dNJ/4

查看

快速解释:

找到someProp: {后跟换行符,然后是同一行的空格,然后是somePropOfSomeProp:,然后是换行符之后的所有内容,然后是下一行的结束括号。