V tomto reťazci (toto nie je môj kód, iba ukážkový vstup)
var b_1 = goog.require("a_b_b");
console.log(b_1.b);
a_b_b
by sa malo premenovať na a.b.b
, takže všetky podčiarknutia vo vnútri a goog.require("...")
príkaz by sa mal premenovať na a .
.
Prišiel som s týmto regulárnym výrazom:
/goog.require("(?:[^_]*(_)[^_]*)*")/g
vysvetlenie:
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
Toto však zachytáva iba posledné podčiarknutie. Ako môžem zachytiť všetky podčiarknutia v a goog.require("...")
výkaz?
Neviem, či je to užitočné, ale podčiarkovníky nahrádzam javascriptom, takže hľadanie pozadu nie je (natívne) podporované.
Aby bolo jasné: chcem iba podčiarknutia vo vnútri goog.require("...")
vyhlásenie, ktoré sa má nahradiť, takže podčiarknutie v b_1
by sa nemali vymeniť.
odpovede:
4 pre odpoveď č. 1Môžete použiť tento regex:
var result = str.replace(/goog.require("[^"]+")/g, function (match) {
return match.replace(/_/g, ".");
});
Najprv sa nájdu všetky výskyty, ktoré sa zhodujú s goog.require("str")
a nahradí všetky výskyty "_"
s "."
.