正则表达式 - 捕获两个字符串之间的所有下划线

时间:2017-07-10 13:32:36

标签: javascript regex

在这个字符串中(这不是我的代码,只是示例输入)

var b_1 = goog.require('a_b_b');
console.log(b_1.b);

a_b_b应重命名为a.b.b,因此goog.require('...')语句中的所有下划线都应重命名为.

我想出了这个正则表达式:

/goog\.require\('(?:[^_]*(_)[^_]*)*'\)/g

说明:

goog\.require\('   literal
(?:                non-capturing group
[^_]*              match anything except underscore
(_)                capture underscore
[^_]*              match anything except underscore
)                  end of non-capturing group
*                  there can be more than one underscore in a goog.require statement
'\)                literal

但这只能抓住最后一个下划线。 如何在goog.require('...')语句中捕获所有下划线?

我不知道它是否有用,但我用javascript取代了下划线,所以看起来不支持(原生)。

要明确:我只希望替换goog.require('...')语句中的下划线,因此不应替换b_1中的下划线。

1 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

var result = str.replace(/goog\.require\('[^']+'\)/g, function (match) {
    return match.replace(/_/g, '.');
});

首先查找与goog.require('str')表单匹配的所有匹配项,并将所有'_'替换为'.'