2017-09-06 127 views
1

,所以我有一個這樣的字符串:正則表達式選擇另一種選擇

var a = " 'asdf'+'asdf'+'we' + 1"; 

我能夠與選擇三個報價:

'([^']*)' 

如何選擇單引號的開始(')在字符串中使用正則表達式? 也是一個單獨的正則表達式來選擇單引號(')的結尾?這可能與正則表達式?我將用< <取代報價的開頭。

最終字符串像

" <<asdf'+<<asdf'+<<we' + 1" 
+0

我懷疑你真的需要那個。你需要在這裏完成的最終目標是什麼?改變'a'看起來像....? –

+0

@Wiktor:我試圖在開始時替換爲<<,因此最終的字符串將如下所示: 「<< asdf'+ << asdf'+ << we'+ 1」 – wonghenry

+0

我知道我可以使用javascript來輕鬆完成,只是想看看我是否可以用正則表達式來實現。 – wonghenry

回答

1

當你需要更換隻有一個模式,使用捕獲組輪,你需要保持部分的某些部分,而只是比賽(和消費)你所需要的部件去除。

var a = " 'asdf'+'asdf'+'we' + 1"; 
 
console.log(
 
    a.replace(/'([^']*')/g, '<<$1') 
 
); 
 
// And, to replace both ' in one go (notice the) shift to the left): 
 
console.log(
 
    a.replace(/'([^']*)'/g, '<<$1>>') 
 
);

這裏,

  • ' - 比賽和消耗'
  • ([^']*') - 比賽和捕獲成1組零個或多個字符以外'(與[^']* )然後是'。替換模式中的$1是在找到有效匹配後存儲在組1中的內容的佔位符。
  • ([^']*) - 只會捕獲除'之外的任何0+字符,因此最終的'會被匹配並消耗,並且在$1佔位符內容中將丟失。

此外,請參閱regex demo 1regex demo 2

+0

謝謝!還有一個問題,我如何能夠匹配'在一對的末尾?所以我會得到一個字符串: 「<> + <> + <> + 1」 – wonghenry

+1

@wonghenry同樣的想法,你的正則表達式已經準備好了。只需使用'a = a.replace(/'([^'] *)'/ g,'<<$1>>')'。 –

+0

gotcha,感謝您的解釋! – wonghenry