在javascript中使用.match的正则表达式多次带来结果

在javascript中使用.match的正则表达式多次带来结果,javascript,regex,Javascript,Regex,我有一个regex\w?(行-)\d+,我正在尝试使用javascript从html中获取位 这是我的html的一部分: <div class="col-md-1"><input class="form-control row-25 all" type="text" value="NA" onchange="validate('rep',this)" disabled></div> <div class="col-md-1"><input c

我有一个regex
\w?(行-)\d+
,我正在尝试使用javascript从html中获取位 这是我的html的一部分:

<div class="col-md-1"><input class="form-control row-25 all" type="text" value="NA" onchange="validate('rep',this)" disabled></div>
<div class="col-md-1"><input class="form-control row-25 all" type="text" value="$15" onchange="validate('rep',this)" disabled></div>
<div class="col-md-1"><input class="form-control row-25" type="text" value="Per number" disabled></div>

这就是我的js
var rowIndex=element.className.match(/\w?(row-)\d+/)

我从中得到的是,匹配函数是

第25排,第25排-

我想得到的只是

第25排

我做错了什么?谢谢

更新:


实际上,我已经找到了如何获得所需内容的答案,但这仍然不能解释输出,我所做的是选择读取rowIndex[0],而忽略其余内容,但是为什么“row-”会出现?

我您想要获得
row-25
使用:

rowIndex = element.className.match(/\w?(row-\d+)/);
将正则表达式更改为:

/\w?row-\d+/
由于您的正则表达式具有此捕获组
/(行-/
),因此在结果中,您将在数组中获得2个元素:

  • 完全匹配输入字符串
  • 俘获群体
  • 因为您并不真正需要捕获组,所以不要在
    行-

    周围放括号,因为
    match()
    返回
    null
    或一个结果数组。这些结果是完整模式(
    \w?(行-\d+
    )以及由括号内的位表示的子模式(
    行-
    )。这就是说,您的正则表达式也将匹配类,如
    arrow-25
    row-25xyz
    。如果需要,这里有一个解决方法:

    /(?:^|\s)(row-\d+)(?:\s|$)/
    
    解剖:

    (…)捕获子模式
    (?:…)不捕获子模式
    
    (?:^|\s)字符串或空白的开头
    (行-\d+“行-”加上至少一位数字(子模式1)
    (?:\s |$)空格或字符串的结尾
    
    如果只想提取数字:

    /(?:^|\s)row-(\d+)(?:\s|$)/
    
    解剖:

    (?:^|\s)字符串或空白的开头
    行-“行-
    (\d+)至少一位数字(子模式1)
    (?:\s |$)空格或字符串的结尾
    
    用法示例:

    var r = /(?:^|\s)row-(\d+)(?:\s|$)/,
        n = el.className.match(r);
    if (n) { // if n is not null
        n = n[1]; // set n as subpattern 1
    }
    
    如果类名为
    表单控制行-25 all
    n
    将是
    25

    另见:


    由于捕获组,您将获得
    行-