【问题标题】:JavaScript trim line breaks with regex?JavaScript用正则表达式修剪换行符?
【发布时间】:2011-11-16 17:05:14
【问题描述】:

我正在使用谷歌翻译来翻译一个文本区域的内容并用 API 响应填充另一个文本区域。 在我的源文本区域中,我将 /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&lt;br /&gt;world" 时,法语的响应是"bonjour \u003cbr /\u003e monde"

使用我的replace(/ &lt;br \/&gt; ?/g, '\n') 正则表达式,我可以纠正这个问题,但是当我查询两个换行符时,"hello&lt;br /&gt;&lt;br /&gt;world" 的响应是"bonjour \u003cbr /\u003e\u003cbr /\u003e monde"

我该如何纠正这个问题?

【问题讨论】:

  • 这引出了一个问题:为什么要用&lt;br/&gt;s 替换换行符?
  • @cheeken。我不确定,但对于有效的 XHTML,所有标签都必须关闭(或自关闭)
  • @Andrew 澄清一下,“换行符”是指\ns。我想知道 FFish 想要用 &lt;br/&gt;s 替换 \ns。如果问题是 GET 请求和无效字符,可以通过编码解决。
  • @cheeken - 这是一个很好的观点。 $.ajax 缺少 data 参数,因此可能在 URL 中编码错误。
  • 我敢冒险,在将数据发送给 Google 之前没有理由进行替换。之后你可以这样做,避免混乱。

标签: javascript jquery regex line-breaks trim


【解决方案1】:

你可以让两边的空格都是可选的:

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

另一种选择是使用/ *&lt;br \/&gt; */g/\s*&lt;br \/&gt;\s*/g

为清楚起见,我们使用下划线代替空格:
如果你的文本是"a_&lt;br /&gt;_&lt;br /&gt;_b"/_&lt;br \/&gt;_?/g 会失败,因为第一个匹配占用了第二个空格(导致"a\n&lt;br /&gt;_b"),而第二个&lt;br /&gt; 不能在没有前导空格的情况下匹配。

【讨论】:

  • @FFish - 没问题。不过,我会注意到 Checheen 的评论 - 可能有更好的解决方案来解决您的问题。
  • 在替换查询之前我使用了encodeURIComponent(query)
【解决方案2】:

试试:

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

或者,如果可能,首先发送翻译到谷歌的请求,然后用BR替换换行符|换行符

【讨论】:

  • 这并不是 OP 真正遇到的问题。此外,"a\n\r\b"(共 2 行)是资源管理器式的新行,将转换为"a&lt;br/&gt;&lt;br/&gt;b",然后转换为"a\n\n\b"(3 行)。在其他浏览器上它应该可以工作。
最近更新 更多