2017-07-10 73 views
0

在此字符串之間的所有底線(這不是我的代碼,只是樣品輸入)正則表達式 - 捕獲兩個字符串

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中的下劃線不應被替換。

+0

爲什麼我們不能在這裏使用'str.replace(/ _/g,'。')'? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ這也會替換'b_1'中的'_',我只想要替換'goog.require('...')中的下劃線。 – user7353781

回答

4

你可以使用這個表達式:

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

這首先找到匹配goog.require('str')形式所有出現並取代的'_'所有出現的'.'

+0

這也將替換'b_1'中的'_',我只想要替換'goog.require('...')中的下劃線。 – user7353781

+0

我不確定我是否跟隨,你能舉個例子嗎?字符串中的b_1在哪裏? –

+0

看到我的代碼在問題中。只有'a_b_b'應該重命名,而'b_1'應該保持不變。 – user7353781