动态正则表达式,用于提取基于点概念的变量

时间:2015-03-20 09:23:25

标签: javascript regex

我将使用什么正则表达式返回包含scope.的所有字符串(以点表示法),但返回包含后续任意数量点的完整值。

例如,下面的代码不会返回".string"部分。

> "scope.object.string".match(/(scope[.]\w+)/gi)

< ["scope.object"]

以下代码将返回"scope.object.object2",因为我明确添加了第二个[.]\w+,这不是动态的。

> "scope.object.object2.string".match(/(scope[.]\w+[.]\w+)/gi)

< ["scope.object.object2"]

我将如何动态执行此操作,以便从此字符串中获取此值:

> "scope.object.string scope.object.object2.string scope.object.object2.object3.string".match(/newRegex/)

< ["scope.object.string", "scope.object.object2.string", "scope.object.object2.object3.string"]

如果您可以在同一个调用中使用相同的正则表达式从每个字符串中删除"scope."部分,那就更好了:

> "scope.object.string scope.object.object2.string scope.object.object2.object3.string".match(/newRegex/)

< ["object.string", "object.object2.string", "object.object2.object3.string"]

1 个答案:

答案 0 :(得分:2)

scope[.](?:\w+[.])*\w+

您可以使用此功能。如果您要删除scope.使用

scope[.]((?:\w+[.])*\w+)

抓住小组1.看演示。

https://regex101.com/r/pT4tM5/24

var re = /scope[.]((?:\w+[.])*\w+)/gm;
var str = 'scope.object.object2.string\nscope.object.object2';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}