在javascript中使用.match的正则表达式不止一次地带来了结果

时间:2014-04-14 06:56:04

标签: javascript regex

我有这个正则表达式\w?(row-)\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+/);

我从.match函数得到的是这个

  

第25行,第 - 行 -

我想要获得的只是

  

行-25

我在这里做错了什么?感谢。

更新:

实际上我已经找到了如何得到我需要的答案,但这并没有解释输出,我做的是我选择读取rowIndex [0],而忽略了其余的,但为什么是& #34;行 - &#34;无论如何出现?

3 个答案:

答案 0 :(得分:0)

我想让row-25使用:

rowIndex = element.className.match(/\w?(row-\d+)/);

答案 1 :(得分:0)

将正则表达式更改为:

/\w?row-\d+/

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

  1. 完全匹配的输入字符串
  2. 捕获的小组
  3. 由于您并不真正需要捕获群组,因此不要在row-附近放置括号

答案 2 :(得分:0)

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

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

(...)       captures subpattern
(?:...)     doesn't capture subpattern
(?:^|\s)    the beginning of the string or a whitespace
(row-\d+)   "row-" plus at least one digit (subpattern 1)
(?:\s|$)    a whitespace or the end of the string

如果您只想提取数字:

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

(?:^|\s)   the beginning of the string or a whitespace
row-       "row-"
(\d+)      at least one digit (subpattern 1)
(?:\s|$)   a whitespace or the end of the string

用法示例:

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
}

使用类似form-control row-25 all的班级名称,n将为25

同时阅读: