以下正则表达式有什么问题,它适用于许多在线JavaScript正则表达式测试程序(和RegEx Buddy),但在我的应用程序中不起作用?
旨在用超链接替换URL。 Javascript位于javascript文件中。
var fixed = text.replace(/\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]/ig, "<a href='$&' target='blank'>$&</a>");
例如,Chrome就抱怨&amp;无效(IE8也是如此)。有没有办法逃避&符号(或其他任何错误),而不诉诸RegEx对象?
答案 0 :(得分:1)
那些测试人员允许你以原始形式输入正则表达式,但是当你在源代码中使用它时,你必须以字符串文字的形式或者(在这里的情况下)写一个正则表达式文字。 JavaScript对其正则表达式文字分隔符使用正斜杠,因此您必须转义正则表达式本身的任何斜杠,以避免混淆解释器。
一旦你逃脱斜线,它应该停止抱怨&符号。这很可能是由于畸形的正则表达式字面意思造成的。
我认识到正则表达,前几天自己使用过它;你是从RegexBuddy的图书馆得到的,不是吗?如果你使用RB的“使用”功能来创建一个兼容JS的正则表达式,那么它就会为你转义斜杠。
答案 1 :(得分:0)
这适用于Chrome浏览器
var fixed = text.replace(/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/igm, "<a href='$1' target='blank'>$1</a>");