/ / regex - zachytí všetky podčiarkovníky medzi dvoma reťazcami - javascript, regex

regex - zachytenie všetkých podčiarkov medzi dvoma reťazcami - javascript, regex

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ď č. 1

Môž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 ".".