JavaScript 将纯文本转换为链接 &&表情符号
工作示例: http://alpha.jsfiddle.net/gTpWv/
这两种方法单独工作,但是一旦表情符号的正则表达式得到原始 HTML 代码来处理,事情就会变得丑陋。
K = K.replace(/\b((http:\/\/)|(www\.))[^ ]{5,}/g, function (x) {
var b = x;
if (b.indexOf("www") == 0) {
b = "http://" + b
}
return '<a href="' + b + '" target="_blank">' + x + "</a>"
// K is now /"Testing <a href="http://www.google.com," target="_blank">http://www.google.com,</a> :D, ^^"/
for (var d = 0; d < smiliesArray.length; d++) {
K = K.replace(new RegExp(smiliesArray[d][0], "g"), '<img src="' + smiliesArray[d][1] + '">');
}
// K is now Testing <a href="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/www.google.com," target="_blank">http<img src="http://i.imgur.com/MVk87.gif">/www.google.com,</a> <img src="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/i.imgur.com/7JJNL.gif">, <img src="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/i.imgur.com/vRgA3.gif">
我确实发现正则表达式声称可以解决此问题,但将其插入正则表达式中:http://alpha.jsfiddle.net/gTpWv/1/ 不返回任何内容。
我还发现遵循 这个 过程的想法很有趣,但我会留下两行单独的行,一行带有链接,另一行带有链接使用表情符号,需要另一个正则表达式才能将一个表情符号注入另一个表情符号。
我不确定我应该使用更好的正则表达式还是尝试找到另一种方法来解决这个问题。
Working example: http://alpha.jsfiddle.net/gTpWv/
Both of the methods work separately, but once regexp for smilies gets raw HTML code to process, things get ugly.
K = K.replace(/\b((http:\/\/)|(www\.))[^ ]{5,}/g, function (x) {
var b = x;
if (b.indexOf("www") == 0) {
b = "http://" + b
}
return '<a href="' + b + '" target="_blank">' + x + "</a>"
// K is now /"Testing <a href="http://www.google.com," target="_blank">http://www.google.com,</a> :D, ^^"/
for (var d = 0; d < smiliesArray.length; d++) {
K = K.replace(new RegExp(smiliesArray[d][0], "g"), '<img src="' + smiliesArray[d][1] + '">');
}
// K is now Testing <a href="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/www.google.com," target="_blank">http<img src="http://i.imgur.com/MVk87.gif">/www.google.com,</a> <img src="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/i.imgur.com/7JJNL.gif">, <img src="http%3Cimg%20src=" http:="" i.imgur.com="" mvk87.gif"="">/i.imgur.com/vRgA3.gif">
I did find regexp claiming to solve this issue, but inserting it into the regexp: http://alpha.jsfiddle.net/gTpWv/1/ returns nothing.
I've also found interesting the idea to follow this procedure, but I would be left with two seperate lines, one with links and one with smilies and it would take another regexp to inject one into another.
I'm not sure should I meddle with a better regexp(s) or try to find another way to solve this problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是
:/
会被捕获在不该捕获的地方。每次K
在替换过程中发生变化时,它都会被输入一些包含邪恶种子的http://
字符串...:/< /code>
位。在下一次迭代中,这些将被替换为相应的 笑脸,从而破坏存储在
K
。我的方法是进行两阶段搜索和替换。在这里查看它的实际效果 http://alpha.jsfiddle.net/gTpWv/7/ ,并继续阅读以获得进一步的解释。
我们首先将每个网址和表情符号更改为中间形式。要使用示例字符串
“Testing www.google.com, :D, ^^ :/”
:现在,K 将包含Testing {{_u_1_}} {{_s_1_}}, {{_s_2_}} {{_s_3_}}。我希望大家清楚这些 {{}} 字符串是前面提到的 url 和表情符号的中间形式。这些字符串的实际值存储在两个名为
urlSubstitutions
和smilieSubstitutions
的数组中。下一步只是将中间形式解码为其格式化版本:希望它有帮助!
The problem is that
:/
will be caught in places where it shouldn't. Every timeK
changes during replaces, it is fed with somehttp://
strings that contain the seeds of evil... the:/
bits. At the next iteration, these will be replaced with the corresponding smilie, corrupting the generated HTML stored inK
.My approach was to do a 2-phase search and replace. See it in action here http://alpha.jsfiddle.net/gTpWv/7/, and read on for further explanation.
We start by changing every url and smilie to intermediate forms. To use your example string
"Testing www.google.com, :D, ^^ :/"
:By now, K will contain Testing {{_u_1_}} {{_s_1_}}, {{_s_2_}} {{_s_3_}}. I hope it's clear that these {{}} strings are the aforementioned intermediate forms of urls and smilies. The actual values of these strings are stored in two arrays named
urlSubstitutions
andsmilieSubstitutions
. The next step is simply to decode the intermediate forms into their formatted versions:Hope it helps!