【问题标题】:Find number that follows certain string which includes both letters and punctuation查找包含字母和标点符号的特定字符串后面的数字
【发布时间】:2017-09-04 14:35:41
【问题描述】:

我正在尝试找到一种方法来提取出现在 abc/ 之后紧接在 / 之后以及任何其他字母、数字或标点符号之前的数字。

例如:

abc/134567/something 应该返回 1234567

abc/1234567?foo=bar 仍然应该只返回 1234567

blah/1234/abc/678 应该只返回 678 因为我只寻找成功的数字abc/

我知道有两种选择:正则表达式或子字符串匹配。

为了执行子字符串匹配,我需要索引点,但我怀疑是否只执行indexOf("abc/"),因为它只返回第一个字母的索引 - a - 它可能出现在字符串的其他地方。

对于正则表达式,我一直在苦苦挣扎,因为我发现搜索字母和斜杠的混合似乎会导致它返回 null。

那么最好的方法是什么?

【问题讨论】:

  • 你应该阅读一下regex,这并不难(regex101.com/r/cplaPU/1)
  • 你在找什么,作为数字的子字符串,还是起始模式的索引?
  • 我真的认为你唯一缺少的就是用`\`转义/

标签: javascript regex string substring


【解决方案1】:

你可以使用这个正则表达式:

var rgx = new RegExp("abc\/([0-9]+)","gi");

然后:

var m = rgx.exec("abc/1234567?foo=bar");
console.log(m[0]);

在 cmets 之后编辑

【讨论】:

  • 这将返回带有 abc/ 前缀的字符串 - 我只需要后面的数字
【解决方案2】:

您可以使用正则表达式并搜索abc/ 和后面的数字。

var array = ['abc/134567/something', 'abc/1234567?foo=bar', 'blah/1234/abc/678'];

console.log(array.map(s => s.match(/abc\/(\d+)/)[1]));

【讨论】:

    【解决方案3】:

    我们接受具有abc/ 的字符串,其后是一个整数,被视为匹配组,以及字符串的结尾或后面的一些非数字符号。

    abc\/(\d+)(?:$|\D)
    

    test

    您将在 Javascript 中使用匹配组提取:

    var myRegexp = /abc\/(\d+)(?:$|\D)/g; 
    var match = myRegexp.exec(inputString);
    var result=match[1]; // the number after abc/
    

    在除 JavaScript 之外的另一个正则表达式引擎中,可以使用前瞻和后瞻。但是在 JS 中,后视是被禁止的。 :-(。所以我们必须使用这个,有点复杂。

    【讨论】:

      【解决方案4】:

      你是否在追求这样的事情:

      ^(.*\/)(\d+)(.*)
      

      第二组会在斜线后面给你数字。

      Look at the regex here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2014-10-27
        • 2011-10-21
        • 2017-11-02
        • 2012-10-19
        • 1970-01-01
        相关资源
        最近更新 更多