JavaScript 用正则表达式修剪换行符?
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以将两侧的空格设置为可选:
另一种选择是使用
/ *
或; */g
/\s*
。\s*/g
为了清楚起见,让我们使用下划线而不是空格:
如果您的文本是
"a_
,则_
_b"
/_
会失败,因为第一个匹配会消耗第二个空格(导致_?/g
"a\n
),并且第二个>_b"
在没有前导的情况下无法匹配 空间。You can make the spaces optional on both sides:
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.尝试:
或者,如果可能的话,首先发送翻译为 Google 的请求,然后用
BR
替换 newlines|linefeedsTry:
Or, if posible, firstly send request for translating into Google, then replace newlines|linefeeds with
BR