【发布时间】:2014-07-20 22:41:43
【问题描述】:
我有一个包含随机单词、url、电子邮件地址等的大文本文档。例如:“word 2014 john@doe.com http://www.example.com/ http://example.com/image.gif”,但看起来可能不同,可能有换行符、多个空格、制表符等。而且数据可能很快变得庞大(它是一种书签服务,因此数据一直以图像、文本和超链接的形式到达)。
文本文档中的另一个内容示例(我用于测试的那个):
http://movpod.in/images3/MovPod-logo.png
https://dt8kf6553cww8.cloudfront.net/static/images/developers/chooser-drawing-vfln1ftk6.png
http://xregexp.com/assets/regex_cookbook.gif
asd asd ad feaf
apa
http
我想将所有这些字符串包装在标签中,并能够定位图像、超链接、电子邮件和字符串。我尝试了不同的方法,但不确定哪种方法最好,而且还有一个我不完全理解的 RegExp。
最终结果应该是:
<span>word</span>
<span>2014</span>
<a class="mail" href="mailto:john@doe">john@doe.com</a>
<a class="url" href="http://www.example.com/">http://www.google.com/</a>
<a class="img" href="http://example.com/image.gif">http://example.com/image.gif</a>"
匹配。然而,这种方法并不能保持文本顺序不变,但它确实有效。
arr = data.split("\n");
for (i = 0; i < arr.length; i++)
{
arr2 = arr[i].split(' ');
for (j = 0; j < arr2.length; j++)
{
if (arr2[j].match(/(.gif|.png|.jpg|.jpeg)/))
{
ext = arr2[j].substr(-4);
ext = ext.replace(".","");
imgs += '<a class="img '+ext+'" href="'+arr2[j]+'">'+arr2[j]+'</a>';
}
else if (arr2[j].match(/(http:)/))
{
urls += '<a class="url" href="'+arr2[j]+'">'+arr2[j]+'</a>';
}
else
{
spans += '<span>'+arr2[j]+'</span>';
}
}
}
正则表达式。我认为可以在 exp_all 中查找逆,就像在除 http 之外的任何其他内容中一样。然而它没有。
var exp_img = /(https?:\/\/([\S]+?)\.(jpg|jpeg|png|gif))/g,
exp_link = /([^"])(https?:\/\/([a-z-\.]+)+([a-z]{2,4})([\/\w-_]+)\/?)/g,
exp_all = /^((?!http).)*$/g;
text = data.replace(exp_all, '<span>$3</span>');
text = text.replace(exp_img, '<a class="img" href="$1">$1</a>');
text = text.replace(exp_link, '<a class="url" href="$2">$2</a>');
因此,我们将不胜感激完成这种纯文本到 HTML 转换的最佳方式。如果已经有某种类型的库,我会很高兴的。我正在查看 Markdown,但我仍然需要更新 Markdown 的纯文本,所以我想这不是一个选择。
如果可能的话,我想去掉“http://”,让它尽可能干净整洁。
【问题讨论】:
-
不要使用 javascript php 更强大,它会做你想做的事。如果这是您想要的方向,请向此格式提问。我知道有时我们会受到限制,但如果您可以访问某种服务器,那么使用 php 可以实现这一点
-
我正在通过 javascript 获取文本内容,并希望它保留在该范围内。基本上我有一个 chrome 扩展,可以将 .txt 保存到 Dropbox 文件夹。该 .txt 包含大量随机内容,可以是文本世界中的任何内容。然后我想破译它并将其转换为 html,以便我可以将图像与其他 url 分开,并将单词转换为 span。如果可能的话,我不想涉及 php。
-
从 txt 文件生成 html 文件的最佳方法是通过它并在使用正则表达式检查后对每个单词进行 derrière,然后我们可以在推送包含在相应标签中的单词时动态创建 html
-
是的,在我的代码中,我想这就是我为超链接和图像所做的事情,但要在跨度中捕获其余部分,我不知道。
标签: javascript regex plaintext