【问题标题】:jquery regex just finds first occurrencejquery regex 只是找到第一次出现
【发布时间】:2015-02-08 00:48:28
【问题描述】:

我正在尝试为脚本查找特定的类模式。 但我的正则表达式调用未能找到所有事件。 相反,它只返回第一个。

string = "col-xs-1 col-md-middle col-lg-middle"
s = /col(?:-(..)-|-)(?:middle|top|bottom)/g.exec(string);
console.log(s)

output -> ["col-md-middle", "md"]

有谁知道我在这里做错了什么?

【问题讨论】:

    标签: jquery regex


    【解决方案1】:

    使用string.match 函数。带有全局正则表达式的exec 应在循环中使用,因为它仍会检索所有匹配的子表达式。

    > str.match(/col(?:-(..)-|-)(?:middle|top|bottom)/g)
    [ 'col-md-middle', 'col-lg-middle' ]
    

    如果您想获得匹配以及捕获,请使用以下内容。

    > var re = /col(?:-(..)-|-)(?:middle|top|bottom)/g;
    undefined
    > var m;
    undefined
    > var a = [];
    undefined
    > while ((m = re.exec(str)) != null) {
    ... a.push(m[0])
    ... a.push(m[1])
    ... }
    4
    > a
    [ 'col-md-middle',
      'md',
      'col-lg-middle',
      'lg' ]
    

    Reference

    【讨论】:

    • 你能告诉我为什么原始代码没有按应有的方式工作吗?
    • re.exec 函数仅返回第一个匹配项。但是当它在循环中使用时,它会打印所有匹配项,因为循环会迭代直到找不到匹配项。
    • 合乎逻辑,可能是因为速度的原因,仍然令人困惑为什么他们没有把它做成 gloval。反正thx
    【解决方案2】:
        var t = this
            s = t.attr('class').match(/(col(-(..)-|-)(middle|top|bottom))/g).join(' ').split('-');
        $(s).each(function(k,v){
            if (k%2!==0) {
               // here i get the string after col-
            }
        });
    

    这是我的解决方案, 小一点,我喜欢避免 while,他们只是喜欢自己无限循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多