使用正则表达式进行JavaScript修剪换行?

时间:2011-09-14 05:07:54

标签: javascript jquery regex line-breaks trim

我正在使用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"

我该如何纠正?

2 个答案:

答案 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替换换行符|换行符