【问题标题】:Grabbing the third fragment between square brackets抓住方括号之间的第三个片段
【发布时间】:2011-08-28 18:05:08
【问题描述】:

仍然完全坚持使用正则表达式和方括号。希望有人可以帮助我。

假设我有一个这样的字符串:

room_request[1][1][2011-08-21]

如何从中取出第三个片段?

我尝试了以下方法,但我不确定自己在做什么,因此很难弄清楚我哪里出错了。

.match(/\[(.*?)\]/);

但这会返回[1] 片段。 (我猜是第一个)。 所以,我在这里问过,人们告诉我添加一个全局标志:

.match(/\[(.*?)\]/g)[2];

在我使用此正则表达式的其他情况下,它运行良好。但是,在这种情况下,我想要方括号内的东西。它返回:

[2011-08-21]

但我真的很想要2011-08-21

我该怎么做?非常感谢。

如果有人能推荐任何关于正则表达式的体面资源,那就太好了。我开始了解最基本的内容,但是大多数这些东西都太令人困惑了。谢谢。

【问题讨论】:

    标签: javascript regex match


    【解决方案1】:

    两种可能的方法。获取第三个括号表达式:

    .match(/\[.*?\]\[.*?\]\[(.*?)\]/);
    

    或者,如果你知道你想要的表达式总是在字符串的末尾:

    .match(/\[(.*?)\]$/);
    

    【讨论】:

      【解决方案2】:
      var str = "room_request[1][1][2011-08-21]"
      var val = str.match(/\[[^\]]*\]\[[^\]]*\]\[([^\]]*)\]/);
      alert(val[1]);
      

      【讨论】:

        【解决方案3】:

        我认为这不那么混乱了:

        var r = "room_request[1][1][2011-08-21]";
        var match = r.match(/(?:\[([^\]]+)\]){3}/);
        console.log(match[1]);
        

        基本上,它会挑选出方括号中包含某些内容的第三个匹配项。您会通过两个匹配项返回匹配结果 - 整个 [1][1][2011-08-21](无论出于何种原因)和匹配日期:2011-08-21

        我的正则表达式有点生疏,但这确实有效。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 2020-06-14
        • 1970-01-01
        相关资源
        最近更新 更多