2012-07-11 21 views
1

我想要做一個替換對包含sq-sq.我的想法做這樣的字符串:如何的Javascript取代`SQ-`或`sq.`

var imgSrc = event.dataTransfer.getData('Text'); 
    imgSrc = imgSrc.replace('sq-', 'mt-') || imgSrc.replace('sq.', 'mt.'); 

任何想法我可以得到這個工作?

+0

那麼,你嘗試了什麼?在替換值中使用「*捕獲組*」和「*返回參考*」將是有用的。 (它可以通過「* lookbehind *」來解決,也可以使用完整匹配。) – 2012-07-11 23:31:26

+0

以爲我可以使用原生js方法('replace()')而不是使用正則表達式(在上面的示例中) – 2012-07-11 23:32:21

+1

無論如何,該代碼不起作用,因爲「||」被無意義地使用(「||」計算爲* first * truthy操作數,或最後一個操作數:例如'「hello」||「world」'評估爲' 「你好」')。考慮這個:'x.replace(..)。replace(..)'作爲上述方法的替代方法,而不使用正則表達式。 – 2012-07-11 23:32:56

回答

5

你可以用一個正則表達式做...

imgSrc = imgSrc.replace(/sq([.-])/g, 'mt$1'); 

jsFiddle

字符類將與文字.(因爲它失去了其在字符類中的特殊含義)和字面-(看起來不像範圍,因此它也沒有特殊含義)匹配。

該比賽被放置在捕獲組1中,其被替換爲$1被引用。

​​。

+0

有趣的解決方案。謝謝。這是否比鏈接2'replace()'更有效率? – 2012-07-11 23:39:13

+2

@bob_cobb http://jsperf.com會告訴你(看我更新的答案)。我會在一箇中做,因爲它對我來說更加清晰(我不必擔心兩個'g'標誌等等)。 – alex 2012-07-11 23:43:29

+0

@alex:請參閱http://jsperf.com/one-regex-vs-two/2 – Bergi 2012-07-11 23:50:08

相關問題