RegExp不同于使用简单的regex文字

RegExp differs from using a simple regex literal

本文关键字:regex 文字 简单 不同于 RegExp      更新时间:2023-09-26

我正试图从这样的字符串中提取属性:

var valueAccessor = "function (){return { id:'someId',label:'Some Label',value:PropertyOnModel} }";

当我特别想从上面的string中获得value时,特别是使用以下代码:

var value = valueAccessor.match(/function(?=[^}]*value's?:'s?('w+))/im)[1]

我有一个要提升的不同属性的列表,例如label和id,所以我遍历它们,并使用RegExp动态设置regex。

// Iterate through id, label, value
for(var prop in obj) {
 var propRegex = new RegExp('/function(?=[^}]*' + prop + '''s?:''s?(''w+))/im');
 var propValue = valueAccessor.match(propRegex)[1];
}

尽管propRegex源与第一个示例中的结构相同,但它返回undefined,因此意味着我无法提取相对值。

有人能解释一下两者之间的区别吗?我哪里错了?

这是

new RegExp(pattern, flags);

所以你需要放下/,把im移出

var propRegex = new RegExp('function(?=[^}]*' + prop + '''s?:''s?(''w+))', 'im');

参考:MDN RegExp构造函数

下面的RegExp似乎格式不正确。

尝试做:

for(var prop in obj) {
 var propRegex = new RegExp("function(?=[^}]*" + prop + "''s?:''s?(''w+))", "im");
 var propValue = valueAccessor.match(propRegex)[1];
}