Javascript 如何从匹配中排除模式中的任何字符串?

Javascript 如何从匹配中排除模式中的任何字符串?,javascript,regex,actionscript-3,url,query-string,Javascript,Regex,Actionscript 3,Url,Query String,我需要编写一个正则表达式,它将匹配那些在其URL中的任何地方都有特定查询字符串名称/值对的URL。应匹配所有其他查询字符串名称以及具有相同名称的所有其他查询字符串值。同一目录(或子目录)中的其他页面不应匹配 例如,假设我需要匹配的基本URL为: http://www.domain.com/directory/ 然后匹配此URL: (似乎[a-z]比不允许的组更强。) 当字符串存在于模式中的任何位置时,如何防止匹配 (这将在ActionScript3/ECMAScript3正则表达式引擎中使

我需要编写一个正则表达式,它将匹配那些在其URL中的任何地方都有特定查询字符串名称/值对的URL。应匹配所有其他查询字符串名称以及具有相同名称的所有其他查询字符串值。同一目录(或子目录)中的其他页面不应匹配

例如,假设我需要匹配的基本URL为:

http://www.domain.com/directory/ 然后匹配此URL:

(似乎[a-z]比不允许的组更强。)

当字符串存在于模式中的任何位置时,如何防止匹配


(这将在ActionScript3/ECMAScript3正则表达式引擎中使用。)

是否有任何理由需要使用正则表达式?为什么不只是简单的字符串搜索呢?它做完全相同的事情,但更容易理解

myString.search("fred=f");

泰勒。

编辑:更改了表达式。以前的版本限制为99个字符

EDIT2:改进了表达式,现在匹配更多案例

我做过这样的东西

(domain.com/directory/.*fred=(?!f$)(?!f&).*)|(domain.com/directory/$)|(domain.com/directory/\?(?!.*fred=f).*)
并在以下字符串上进行了测试

  • domain.com/directory/?foo=f&bar=f
  • domain.com/directory/?foo=bar
  • domain.com/directory/?aaa=bar
  • domain.com/directory/
  • domain.com/directory/?fred=a
  • domain.com/directory/?fred=foo
  • domain.com/directory/?foo=bar&fred=foo
  • domain.com/directory/?fred=f&aaaw=bbb
  • domain.com/directory/?fred=f
  • domain.com/directory/?foo=bar&fred=f
  • 我的regexp与粗体匹配。
    我已经在

    上测试过了,我的一位同事提供了这个答案的基础:

    http://www.domain.com/directory/(?!.*(\?|&)fred=f($|&|#))(\?|#|$)
    
    此正则表达式匹配:

    • http://www.domain.com/directory/
    • http://www.domain.com/directory/?fred=a
    • http://www.domain.com/directory/?fred=foo
    • http://www.domain.com/directory/?foo=bar
    但不是:

    • http://www.domain.com/directory/?fred=f
    • http://www.domain.com/directory/?fred=f&a=b
    • http://www.domain.com/directory/?a=b&fred=f

    我在一个平台上工作,该平台接受URL或正则表达式来匹配URL,以确定是否执行这些操作。实现更深层的逻辑需要相当多的工作。第二个正则表达式工作得很好,但是{2,99}做什么呢?它在某些子字符串中最多只能匹配100个字符吗?我已经编辑了我的帖子。现在,regexp完全按照您希望的方式工作。感谢您在这方面的努力。不幸的是,查询字符串(.*fred=(?!f$)(?!f&).*)|())无法按我的预期工作,因为它与其他查询字符串不匹配,例如。当我的答案与您的请求匹配时,我建议删除不必要的注释。
    myString.search("fred=f");
    
    (domain.com/directory/.*fred=(?!f$)(?!f&).*)|(domain.com/directory/$)|(domain.com/directory/\?(?!.*fred=f).*)
    
    http://www.domain.com/directory/(?!.*(\?|&)fred=f($|&|#))(\?|#|$)