在 Javascript 中,有一个表示包含数组的对象属性路径的字符串,使用正则表达式捕获数组索引后的属性名称的最佳方法是什么?
有了这个:
'someArray[0].property.otherIgnorableProperties'
我有兴趣仅捕获“属性”部分,忽略“someArray[0]”部分以及“属性”之后的所有内容(包括点)。 “属性”部分可以有有限数量的可能的任意名称。
到目前为止我已经尝试过:
'someArray[0].property'.match(/^someArray\[\d\]\.property|someOtherPropertyName|otherName/g);
谢谢!
编辑:
以下 cars10m 答案是我想出的:
'someArray[0].field3.other'.match(/(?!someArray[\d+]\.)field1|field2|field3.*/g)
但这会失败,因为对于 field3 它返回“field3.other”。对于 field1 和 field2 工作正常。只是为了澄清一下,我需要它返回匹配的段:field1、field2 或 field3。
最佳答案
这样就可以了:
let strings=['someArray[0].wantedprop1.otherIgnorableProperties',
'dada[123].unwantedprop1.second.third',
'X[91234].wantedprop2',
'sameArray[94].wantedprop2.again',
'sameArray[94].wantedprop2notwanted',
'doNotTakeThis.wantedprop2.itIsNotAnArrayElement'
];
strings.forEach(str=>{
let m=str.match(/.+\[\d+\]\.(wantedprop1|wantedprop2|anyotherwantedprop)(?!\w)/);
let result=m&&m[1];
console.log(result);
})
它返回第一个捕获组作为字符串的“唯一幸存内容”,但前提是整个模式匹配。
尚未检查数组的名称,但您可以使用以下正则表达式来执行此操作:
/someArray\[\d+\]\.(wantedprop1|wantedprop2)(?!\w)/
关于JavaScript 正则表达式 : capture property name after array index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62410431/