Regex-去掉第一个和第二个正斜杠之间的文本

Regex - strip out text between first and second forward slashes

本文关键字:之间 文本 第二个 第一个 Regex-      更新时间:2023-09-26

我几乎已经让这个正则表达式工作了,但前导正斜杠有问题——有人能看到我哪里出了问题吗?我只想从这个示例中提取第一个字符串"projects"

  /projects/personal/29/56

另请参阅此处->http://regexr.com?300av

最简单的方法是使用正斜杠拆分字符串

var firstString = url.split('/')[1];

您将获得第一个字符串,但如果您想使用regext进行提取,请记住不要在regex中添加全局参数。

'/([a-zA-Z0-9]{0,})

我希望这能帮助

似乎可以使用split进行测试,但对于纯正则表达式解决方案,请使用:

s = '/projects/personal/29/56';
arr = s.match(/^'/([^/]*)'//); // arr[1] becomes 'project'
document.writeln('<pre>Matched: [' + arr[1] + "]</pre>");

我试着从anubhava那里得到答案,得到了以下

string                          expression                             returns
/projects/personal/29/56        ([a-zA-Z])([^/]*)'/                     projects/
/projects/personal/29/56        ([a-zA-Z])([^/]*)                       projects
/projects123/personal/29/56     ([a-zA-Z])*?([a-zA-Z][0-9])([^/]*)      projects123

第二行实现了bsod99的要求:

  • 删除第一个斜线/
  • /projects/personal/29/56中提取第一个字符串projects

为寻找此类答案的人添加。除了url"/projects"的第一部分之外,您还可以尝试添加全局标志来获取其他值。

/projects/personal/29/56

您只需要遍历[i] 末尾的数组

/'/([a-zA-Z0-9]{0,})/g[i]
expression                       returns
i=0                             /projects
i=1                             /personal
i=2                             /29
i=3                             /56

我在这里添加答案,只是因为我想将其添加到[SO]:Python:返回//regex之间的字符串,而这个问题被标记为这个问题的dup(!!!当我编辑时!!)。

脚本.py

#!/usr/bin/env python3
import re

def main():
    group_name = "between_slashes"
    words = [
                "en/lemon_peel/n/",
                "ca/llimona/n/",
                "/asd /",
                "/asd",
                "asdf/",
                "aa//vv",
            ]
    pat = re.compile("^[^/]*/(?P<{}>[^/]*)/.*$".format(group_name))
    for idx, word in enumerate(words):
        match = pat.match(word)
        if match is not None:
            print("{}: '"{}'" - '"{}'"".format(idx, word, match.group(group_name)))
        else:
            print("{}: '"{}'"".format(idx, word))

if __name__ == "__main__":
    main()

备注

  • 模式似乎很复杂,但我会尽力解释:
    1. 1stchar^)标记字符串的开始
    2. 以下[]与字符类匹配:内容(^/)告诉它匹配任何字符,但/
    3. 接下来,*告诉前一组(#2。[/strong>)可能发生0次或更多次
    4. 然后它跟随/字符,这是我们的1st(开始)保护
    5. 括号()表示组匹配-稍后可以通过其名称引用(between_splash)。有关更多详细信息,请查看[Python3.Docs]:正则表达式语法(搜索(?P<name>...)
    6. 括号之间的内容(在之后)是我们正在寻找的内容(我们已经知道了):0个或更多非/字符s
    7. 下一个/char是我们的2nd(端)防护
    8. 然后,.*告诉:任意字符,0次或更多次
    9. 最后,$标记字符串的末尾
  • 除了问题中提供的字符串之外,我还随意添加了更多要搜索的字符串,以说明一些角落的情况
  • 使用Python 3Python 2运行

输出

c:'Work'Dev'StackOverflow'q45985002>"c:'Install'x64'Python'Python'3.5'python.exe" script.py
0: "en/lemon_peel/n/" - "lemon_peel"
1: "ca/llimona/n/" - "llimona"
2: "/asd /" - "asd "
3: "/asd"
4: "asdf/"
5: "aa//vv" - ""

在JS RegEx中,您可以使用:

'B'/([a-zA-Z0-9-]{0,})'S