Javascript 使用正则表达式匹配字符串中的对象属性
对于以下字符串:Javascript 使用正则表达式匹配字符串中的对象属性,javascript,regex,Javascript,Regex,对于以下字符串: `const someConst= { name: 'someName', someProp: { somePropOfSomeProp: 'value' }};` bindings: { someBinding: '=', someOtherBinding: '@' } 如何匹配someProp的值 假设: 属性名称总是已知的someProp 属性值将始终为object类型 someProp对象不能有嵌套对象。它将是平的 我正在使用Javascript正则表达
`const someConst= {
name: 'someName',
someProp: {
somePropOfSomeProp: 'value'
}};`
bindings: {
someBinding: '=',
someOtherBinding: '@'
}
如何匹配someProp
的值
假设:
- 属性名称总是已知的
someProp
- 属性值将始终为object类型
对象不能有嵌套对象。它将是平的someProp
someProp
。这基本上应该是角度组件的绑定
属性。因此,预期值可能如下所示:
`const someConst= {
name: 'someName',
someProp: {
somePropOfSomeProp: 'value'
}};`
bindings: {
someBinding: '=',
someOtherBinding: '@'
}
或者绑定的道具可能不在同一行。因此,它们可能是:
bindings: { someBinding: '=', someOtherBinding: '@' }
所以基本上我需要:
{
someBinding: '=',
someOtherBinding: '@'
}
此正则表达式匹配整个对象,包括名称someProp:
/someProp: {\n\s*somePropOfSomeProp\:.*\n}/g
使用括号可以创建一个捕获组,您可以使用它来微调要使用的内容。例如:
/someProp: ({\n\s*somePropOfSomeProp\:.*\n})/g
一些警告:如果值字符串还包含somePropOfSomeProp:
,可能会失败,我没有测试足够的案例。或者,如果值出现在多行上
你可以在
快速解释:
查找someProp:{
,后跟一个换行符,在同一行上后跟空格,然后查找somePropOfSomeProp:
,然后在换行符之前查找所有内容,然后在下一行找到右括号。要使用正则表达式来获得问题中的特定要求,可以使用以下命令:
/(?!bindings\s*:\s*)(?:\{[^}]*\})/
它在属性名和冒号上使用了一个负的前向查找,这样它就不会包含在结果中
但是,此正则表达式假定在用于终止对象的字符之前不能有}
字符。因此,如果在该对象中的某个地方有一个包含}
的字符串,它将断开
在扩展讨论中,您还询问了如何获取完整对象。这更复杂,并且表明使用类似JS解析器的方法很可能是一种更好、更可靠的解决方案。为什么要将javascript编写为字符串,然后用regexCan解析它们someProp
对象中是否存在嵌套对象?数据来源是否安全?如果两个答案都是“是”,我倾向于使用JS引擎来计算数据。@KoushikChatterjee:但这不是有效的JSON数据,即使没有const
decl.@adeneo我可以想象一些用途,比如某种脚本来处理某些外部代码,用于分析、迁移或数据挖掘。我正在编写一个网页包加载器来转换一些js代码,然后再将其添加到我的包中。这就是用例。JS代码由webpack以字符串形式提供给加载程序。感谢您的回答,但我实际上希望匹配整个someProp对象。如果你看我更新的问题,你会看到我在最后的期望。谢谢,我会检查这个解析器。