【问题标题】:Regex for matching specific URL with multiple conditions用于匹配具有多个条件的特定 URL 的正则表达式
【发布时间】:2020-01-21 07:20:27
【问题描述】:

我有以下正则表达式模式

const pattern = /^\/(abc|def|something\/thisone|en|ppp){1}/i;

const mat = pattern.exec(myURL);

这里我如何更改上述模式,使其不匹配something/thisone,但是当它后面跟着任何类似这样的参数时:something/thisone/<anystring/number> ..?

试过了:

const pattern = /^\/(abc|def|something\/thisone\/.*|en|ppp){1}/i;

const pattern = /^\/(abc|def|something\/thisone\/.+|en|ppp){1}/i;

似乎没有任何效果..

有效网址:

www.mysite.com/abc/

www.mysite.com/abc

www.mysite.com/def/

www.mysite.com/something/thisone/whatever www.mysite.com/something/thisone/whatever/ www.mysite.com/something/thisone/whatever?u=90

【问题讨论】:

  • 添加您的有效网址。
  • www.mysite.com/abc; www.mysite.com/something/thisone/p2edn3; @AZ_
  • www.mysite.com/something/thisone 无效?
  • 是的,没错
  • 您能否在问题中提供一些示例字符串

标签: javascript regex reactjs


【解决方案1】:

试试这个简单的正则表达式。

let regex = /.*something\/thisone\/.+/g

let string1 = 'something/thisone/acd';
let string2 = 'something/thisone/abc/';
let string3 = 'something/thisone';
let string4 = 'https://somedomain/something/thisone/123';

console.log(string1.match(regex));
console.log(string2.match(regex));
console.log(string3.match(regex));
console.log(string4.match(regex));

【讨论】:

    【解决方案2】:

    你可以试试这个:

    const pattern = /^\/(abc|def|something\/thisone\/[0-9a-zA-Z]*){1}/i;

    模式[0-9a-zA-Z]* 应匹配任意数量的字母数字字符。

    【讨论】:

    • 由于某种原因无法正常工作,不确定似乎没有一种模式可以直接正常工作 - 比如我的网址:www.mysite.com/something/thisone/ppp 不匹配跨度>
    【解决方案3】:

    查看添加的示例后,知道 OP 不想捕获任何内容,让我们将其简化为:

    www\.mysite\.com\/(?:abc|def|something\/thisone(?:\/[^\/\s]+)+)\/?
    

    解释:

    www\.mysite\.com         # match www.mysite.com
    \/                       # followed by `/`
    (?:                      # non-capturing group 1
      abc                    # 'abc'
      |                      # OR
      def                    # 'def'
      |                      # OR
      something\/thisone     # 'something/thisone' followed by
      (?:                    # non-capturing group 2
        \/                   # '/' 
        [^\/\s]+             # 1 or more chars, not '/' or space
      )+                     # END group 2. 1 or more times.
    )                        # END group 1
    \/?                      # optional closing /
    

    例如:regex101

    【讨论】:

    • 如果我在thisone 之后只有 1 个字符串,则以上匹配 - 在thisone 之后它可以是这里的任何要求,感谢您的帮助。
    • 好的。我将调整正则表达式,使其可以重复。
    • 最好让群组不被捕获/abc|def|something\/thisone(?:\/[0-9a-z]+)+/
    • OPs 问题中没有关于捕获的内容,只是关于匹配。所以,是否捕捉更好,是在回答一个不同的问题。
    • 最好在不需要的时候这样做。 Regex Non capturing group - Useless?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多