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 № 1Você 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 "."
.