/ / regex - captura todos os sublinhados entre duas strings - javascript, regex

regex - captura todos os sublinhados entre duas strings - javascript, regex

Nesta cadeia (este não é o meu código, apenas entrada de amostra)

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

a_b_b deve ser renomeado para a.b.b, então todos os sublinhados dentro de um goog.require("...") A declaração deve ser renomeada para ..

Eu vim com este regex:

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

Explicação:

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

Mas isso apenas captura o último sublinhado. Como capturar todos os sublinhados em um goog.require("...") declaração?

Não sei se é útil, mas estou substituindo os sublinhados por javascript, portanto, o look behinds não é (nativamente) suportado.

Para ser claro: eu quero apenas os sublinhados dentro do goog.require("...") declaração a ser substituída, portanto, o sublinhado em b_1 não deve ser substituído.

Respostas:

4 para resposta № 1

Você pode usar este regex:

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

Este primeiro localiza todas as ocorrências que correspondem ao goog.require("str") forma e substitui todas as ocorrências de "_" com ".".