2011-09-14 28 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