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
    对象不能有嵌套对象。它将是平的
我正在使用Javascript正则表达式来解决这个问题

要为结构类型提供更多上下文,我们可以为
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对象。如果你看我更新的问题,你会看到我在最后的期望。谢谢,我会检查这个解析器。