正则表达式无法按预期工作

时间:2011-02-04 16:38:42

标签: jquery regex

请参阅jsfiddle。 http://jsfiddle.net/yNJKj/13/

这个正则表达式应该只显示顶级项目。但它在某些类别中以某种方式扼杀了第二级项目。

我做错了什么? 谢谢!

3 个答案:

答案 0 :(得分:5)

我认为你想要的正则表达式是:

/^.*\/activity\/[^/]*$/i

Updated fiddle

或者可能

/^.*\/activity\/[^/]*[a-zA-Z]$/i

Updated fiddle

(我不确定为什么你最后会有那个单字符[a-zA-Z]匹配。)

你原来的

/^.*\/activity\/.*[a-zA-Z]$/i

...允许/.*之前的[a-zA-Z]匹配,因此包括子类别。

答案 1 :(得分:1)

我的猜测是这部分,在正则表达式的末尾:

\/.*[a-zA-Z]$

你告诉它匹配以下内容:

  1. 斜线/
  2. 任何长度
  3. 大写或小写字母
  4. 字符串的结尾
  5. 我不是100%你 并且试图匹配,但是通配符部分(.*)可能匹配所有你想要的东西,以及你不想要的东西。使正则表达式更具针对性可能有所帮助。

    在一个不相关的注释中,如果使用嵌套列表而不是单个无序列表而不是 ,那么它可能会更加语义化并且更容易使用。像这样:

    <ul>
        <li>
            <a href="*">Category</a>
            <ul>
                <li><a href="*">Sub-Category</a></li>
                <li><a href="*">Sub-Category</a></li>
            </ul>
        </li>
    </ul>
    

    但是,如果您决定坚持使用不间断的空格,那么您是否不能使用那些来决定隐藏的内容?看起来你要做的就是隐藏任何以&nbsp;开头的东西,这样可以达到你想要的效果。

答案 2 :(得分:0)

我认为您应该将正则表达式更改为/^.*\/activity\/[a-zA-Z]*$/i,因为.匹配所有字符,包括/