URL正则表达式在javascript中不起作用

时间:2011-08-03 14:03:23

标签: javascript regex url

我正在尝试在Javascript中使用John Gruber's URL regex,但NetBeans一直告诉我语法错误和非法错误:

 var patt = "/(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])
|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]
{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|
(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|
(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:
'".,<>?«»“”‘’]))/";

任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:19)

正如其他人所说,这是双引号。但另外,你可以在javascript中将regexp写为文字(但是你需要在第1行和第3行中转义正斜杠)。

var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;

我还将不区分大小写的修饰符移到了最后。只是因为。 (编辑:嗯,不只是“因为” - 请参阅下面的艾伦摩尔的评论)

注意:无论您使用文字还是字符串,都必须在1行。

答案 1 :(得分:0)

将整个表达式放在一行中,并在开头和结尾删除引号,使其看起来像var patt = /the-long-patttern/;,netbeans仍会抱怨,但浏览器不会,这就是重要的。

答案 2 :(得分:0)

您应该在NetBeans中这样写:

    <div class="col-md-2">
            <nav class="navbar navbar-default" role="navigation">

                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                </div>

                <div class="collapse navbar-collapse">
                    <div class="panel-heading">Categories</div>
                    <ul class="nav nav-stacked">
                        <li><a   href="http://example.com/index.php?cPath=1">Category #1</a></li>
                        <li><a href="http://example.com//index.php?cPath=2">Category #2</a></li>
                        <li><a href="http://example.com//index.php?cPath=3">Category #3</a></li>
                        <li><a href="http://example.com/index.php?cPath=21">Category #4</a></li>      
                    </ul>


                </div><!--navbar-collapse -->
            </nav>

        </div>

        </div>