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

发布于 2024-12-04 14:22:02 字数 1018 浏览 5 评论 0原文

我正在使用 Google Translate 翻译文本区域的内容,并使用 API 响应填充另一个文本区域。 在我的源文本区域中,我将 /n 换行符替换为
换行符,以发送如下查询:

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);
    }
});

:问题是谷歌的响应在换行符周围有空格。 当我查询 "hello
gt;world"
时,法语的响应是 "bonjour \u003cbr /\u003e monde"

与我的 replace(/ br \/> ?/g, '\n') 正则表达式 我可以纠正这个问题,但是当我查询两个换行符时 "hello

world"
响应是 "bonjour \u003cbr /\u003e\u003cbr /\u003e monde"

我该如何纠正这个问题?

I am using Google Translate to translate the contents of a textarea and fill another textarea with the API response.
In my source textarea I am replacing the /n newlines with <br /> line breaks to send the query like this:

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

Then I make the call to 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);
    }
});

The problem is that Google's responses have whitespace around the line breaks.
When I query "hello<br />world" the response in French is "bonjour \u003cbr /\u003e monde"

With my replace(/ <br \/> ?/g, '\n') regex I can correct for that but when I query two line breaks after each other "hello<br /><br />world" the response is "bonjour \u003cbr /\u003e\u003cbr /\u003e monde"

How can I correct for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回首观望 2024-12-11 14:22:02

您可以将两侧的空格设置为可选:

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

另一种选择是使用 / *
; */g
/\s*
\s*/g

为了清楚起见,让我们使用下划线而不是空格:
如果您的文本是 "a_
_
_b"
,则 /_
_?/g
会失败,因为第一个匹配会消耗第二个空格(导致 "a\n
>_b"
),并且第二个
在没有前导的情况下无法匹配 空间。

You can make the spaces optional on both sides:

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

Another option is using / *<br \/> */g or /\s*<br \/>\s*/g.

For clarity, lets use underscores instead of spaces:
If your text is "a_<br />_<br />_b", /_<br \/>_?/g fails because the first match consumes the second space (resulting in "a\n<br />_b"), and the second <br /> cannot be matched without a leading space.

牵你手 2024-12-11 14:22:02

尝试:

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

或者,如果可能的话,首先发送翻译为 Google 的请求,然后用 BR 替换 newlines|linefeeds

Try:

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

Or, if posible, firstly send request for translating into Google, then replace newlines|linefeeds with BR

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文