2014-04-18 27 views
0

輸入:"some random text [[specialthing]] blah blah"正則表達式:替換字符串內模式的返回值函數的

輸出:"some random text ANOTHERTEXT blah blah"


目標:

由什麼myFunction('specialthing');將返回更換[[specialthing]]

我已經得到了一個沒有正則表達式的函數,但我想知道是否會有更簡單/更好的方法來做到這一點。

我的代碼:

data = "some random text [[specialthing]] blah blah"; 
    for(var i = 0 ; i < data.length ; i++){ 
     if(data[i] == '[' && data[i+1] == '['){ 
      var start = i; 
      for(var j = start; j < data.length ; j++){ 
       if(data[j] == ']' && data[j+1] == ']'){ 
        var strInBracket = data.slice(start+2,j); 
        var newStr = myFunction(strInBracket); 
        data = data.replace('\[\[' + strInBracket + '\]\]',newStr); 
       } 
      } 
     } 
    } 

解決方案:

data = "some random text [[specialthing]] blah blah"; 

    var strInBracket = data.match(/([^\[]*)(..[^\]]*..)(.*)/)[2]; 
    var newStr = myFunction(strInBracket.slice(2,-2)); 
    data = data.replace(strInBracket,newStr); 

我使用的JavaScript。

該解決方案不需要是一個正則表達式。

回答

1

你可以匹配下面的正則表達式爲:

([^\[]*)(..[^\]]*..)(.*)

,然後替換爲:

'$1'+myFunction($2)+'$3' //this is pseudocode and not actual code

演示:http://regex101.com/r/iC0pK1

+0

非常感謝。我明白了:D – RainingChain

0

正則表達式在這種情況下是多還是少旨在做你想做的事。編寫邏輯來爲你的模式手動進行字符串替換將是相當多的工作,大量的指標數學,並使正則表達式不必手動。

1

這裏的JavaScript正則表達式的版本你想有一個工作:

/(.*?)\[\[(.*?)\]\](.*)/

,這裏是它的一個fiddle在行動