我正在使用Google Translate翻译textarea的内容,并使用API响应填充另一个textarea。
在我的源textarea中,我将/n
换行符替换为<br />
换行符,以便像这样发送查询:
var query = $('#textarea-src').val();
var query = encodeURIComponent(query);
var query = query.replace(/\n\r?/g, '<br />'); // replace new lines with line breaks
然后我打电话给Google:
$.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);
}
});
问题在于Google的回复在换行符周围有空白。
当我查询"hello<br />world"
时,法语的回复是"bonjour \u003cbr /\u003e monde"
使用我的replace(/ <br \/> ?/g, '\n')
正则表达式,我可以更正,但当我在彼此之后查询两个换行符"hello<br /><br />world"
时,响应为"bonjour \u003cbr /\u003e\u003cbr /\u003e monde"
我该如何纠正?
答案 0 :(得分: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 />
在没有前导空格的情况下无法匹配。
答案 1 :(得分:2)
尝试:
var query = $('#textarea-src').val();
var query = query.replace(/\n|\r/g, '<br\/>'); // replace new lines with line breaks
或者,如果可行的话,首先发送翻译成Google的请求,然后用BR
替换换行符|换行符