对于如下字符串:
`const someConst= {
name: 'someName',
someProp: {
somePropOfSomeProp: 'value'
}};`
我如何匹配someProp
的值?
假设:
someProp
someProp
对象不能有嵌套对象。它将是平的。我正在使用Javascript正则表达式来解决这个问题。
为someProp
所期望的结构类型提供更多上下文。这基本上应该是角度组件的bindings
属性。因此预期值可能如下:
bindings: {
someBinding: '=',
someOtherBinding: '@'
}
或bindings
的道具可能不在同一条线上。所以他们可能是:
bindings: { someBinding: '=', someOtherBinding: '@' }
基本上我需要:
{
someBinding: '=',
someOtherBinding: '@'
}
答案 0 :(得分:1)
要使用正则表达式来获取问题中的特定要求,可以使用:
/(?!bindings\s*:\s*)(?:\{[^}]*\})/
它在属性名称和冒号上使用负向前瞻,因此它不包含在结果中。
但是,此正则表达式假定在用于终止对象的字符之前根本没有}
字符。因此,如果该对象中的某个地方有一个包含}
的字符串,它就会中断。
在扩展讨论中,您询问了如何获取完整对象。这更复杂,并且表明使用像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:
,然后是换行符之后的所有内容,然后是下一行的结束括号。