繁体   English   中英

需要简单的javascript正则表达式帮助…(跳过字符)

[英]Simple javascript regex help needed… (skip characters)

我有一些正则表达式代码,它将字符串中的任何URL(即http://www.url.com转换为超链接(即<a href='http://www.url.com'>http://www.url.com</a>

正则表达式代码:

var exp = /(\b(https?|):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;   
toReturn = toReturn.replace(exp,"<a target='_blank' href='$1'>$1</a>"); 

但是,我不希望它在某些字符之间进行搜索/替换,特别是[img] [/ img]

**注意:[img] [/ img]和url可能多次出现在字符串中...

我怎样才能做到这一点?

非常感谢,

仅使用正则表达式将非常棘手。 这是因为正则表达式只能匹配正则语言 *,并且带有open / close标记的任何语言都不太可能是正则。

(*实际上,大多数编程语言中的“正则表达式”实际上不是正则表达式,并且具有匹配更复杂语言的工具……但是我很少发现这些工具有用,而且我认为它们不值得用于此问题)。

更好的方法是编写一个简单的解析器,该解析器根据标记对输入进行拆分,然后仅对可能包含URL的部分运行正则表达式。

例如,类似:

function fix_urls(str) {
    var result = [];
    var url_re = /\bhttp:…/g;
    var tag_re = /(\[\/?[a-zA-Z]+\])/g;
    var split = str.split(tag_re);
    var in_tag = 0;
    for (var i = 0; i < split.length; i += 1) {
        var part = split[i];
        if (part.search(tag_re) == 0) {
            if (part[1] == "/")
                in_tag -= 1;
            else
                in_tag += 1;
        } else if (in_tag == 0) {
            part = part.replace(url_re, "<a …>…</a>");
        }
        result.push(part);
    }
    return result.join("");
 }

当需要上下文相关的编辑时, 全局替换是错误的方法。 您可以使用查找连续标记扫描仪 ,然后在循环中输出一些标记不变且已编辑的标记。 我找不到如何使用标准javascript或其regexp方法执行此操作。 如果您找到了一个javascript令牌生成器,可以在其中使用regexp或类似符号定义令牌,那么您就快到了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM