2011-09-14 64 views
3

我正在使用Google Translate來翻譯textarea的內容並用API響應填充另一個textarea。 在我的源textarea的我與<br />線替換/n換行符打破發送這樣的查詢:JavaScript修剪行與正則表達式分裂?

var query = $('#textarea-src').val(); 
var query = encodeURIComponent(query); 
var query = query.replace(/\n\r?/g, '<br />'); // replace new lines with line breaks 

然後我打這個電話給谷歌:

$.ajax({ 
    url: apiUrl, 
    dataType: 'jsonp', 
    success: function(data) { 
     var response = data.data.translations[0].translatedText; 
     var response = response.replace(/ <br \/> ?/g, '\n'); // replace line breaks with new lines 
     $('#textarea-trg').val(response); 
    } 
}); 

的問題是,谷歌的迴應在換行符周圍留有空白。 當我查詢"hello<br />world"在法國的反應是"bonjour \u003cbr /\u003e monde"

隨着我replace(/ <br \/> ?/g, '\n')正則表達式我可以糾正這一點,但我彼此"hello<br /><br />world"後查詢的兩個換行符的響應是"bonjour \u003cbr /\u003e\u003cbr /\u003e monde"

我怎樣才能糾正呢?

+0

它提出了一個問題:爲什麼用'
'來代替換行符? – cheeken

+0

@cheeken。我不確定,但對於有效的XHTML,所有標籤都必須關閉(或自行關閉)。 –

+1

@Andrew爲了澄清,'linebreak'指的是'\ n's。我想知道FFish想用'
'來代替'\ n's。如果問題是GET請求和無效字符,那麼可以使用編碼解決。 – cheeken

回答

3

可以使空間可選兩側:

var response = response.replace(/ ?<br \/> ?/g, '\n'); 

另一種選擇是使用/ *<br \/> */g/\s*<br \/>\s*/g

爲了清楚起見,讓我們用下劃線代替空格:
如果你的文字是"a_<br />_<br />_b"/_<br \/>_?/g因爲第一場比賽消耗了第二空間(導致"a\n<br />_b"),第二<br />不能沒有前導空格匹配失敗。

+0

歡呼聲Kobi!還要感謝這個例子:-) – FFish

+0

@FFish - 沒問題。但我會注意到cheeken的評論 - 可能有更好的解決方案來解決您的問題。 – Kobi

+0

替換查詢之前我用'encodeURIComponent(query)' – FFish

2

嘗試:

var query = $('#textarea-src').val(); 
var query = query.replace(/\n|\r/g, '<br\/>'); // replace new lines with line breaks 

或者,如果更多鈔票,首先用於轉換到谷歌發送請求,然後替換換行符|換行與BR

+0

這不是真正的OP問題。此外,總共2行的''a \ n \ r \ b「(這是一個資源管理器式的新行)將被轉換爲'」a

b「',然後轉換爲'」a \ n \ n \ b「'(3行)。在其他瀏覽器上它應該工作。 – Kobi