正则表达式 - 在第一个和第二个正斜杠之间删除文本

时间:2012-02-13 13:53:32

标签: javascript regex

我几乎得到了这个正则表达式的工作但是我遇到了领先的正斜线 - 有谁能看到我在哪里出错?我只想在这个示例中提取第一个字符串“projects” - > http://regexr.com?300av

6 个答案:

答案 0 :(得分:23)

最简单的方法是使用正斜杠

拆分字符串
var firstString = url.split('/')[1];

并且您将拥有第一个字符串,但如果您想使用regext提取而不是这样,请记住不要在正则表达式中添加全局参数。

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

我希望这会有所帮助

答案 1 :(得分:2)

您似乎可以使用拆分进行测试,但使用纯正则表达式解决方案:

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

答案 2 :(得分:2)

我玩了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的要求:删除第一个slah /并从projects中提取第一个字符串/projects/personal/29/56

答案 3 :(得分:1)

添加寻找此类答案的人。除了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

答案 4 :(得分:0)

我在这里添加答案,只是因为我想将它添加到[SO]: Python: return a string between // regex [duplicate]并且该问题被标记为此问题(!!!我正在编辑!!!)。

<强>代码

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. 1 st char(^)标记字符串的开头
    2. 以下[]匹配字符类:内容(^/)告诉它匹配任何字符,但/
    3. 接下来,*表示上一组(2.)可以 0或更多
    4. 然后它跟随/字符,即我们的1 st (开始)后卫
    5. 括号()表示组匹配 - 稍后可以通过其名称(between_slashes)引用。有关详情,请查看[Python]: Regular Expression Syntax(搜索(?P<name>...)
    6. 括号之间的内容(>之后)是我们正在寻找的内容(我们已经知道了什么):0个或更多非/个字符
    7. 下一个/字符是我们的2 nd (结束)警卫
    8. 然后,.*告诉:任何字符,0次或更多次
    9. 最后,$标记字符串的结尾
  • 我冒昧地添加了更多要搜索的字符串,除了问题中提供的字符串,以说明一些极端情况
  • 使用 Python3 Python2
  • 运行

<强>输出

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

答案 5 :(得分:0)

在JS RegEx中,您可以使用:

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