我有这个正则表达式\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;无论如何出现?
答案 0 :(得分:0)
我想让row-25
使用:
rowIndex = element.className.match(/\w?(row-\d+)/);
答案 1 :(得分:0)
将正则表达式更改为:
/\w?row-\d+/
由于正则表达式具有此捕获组/(row-)/
,因此在结果中您将获得数组中的2个元素:
由于您并不真正需要捕获群组,因此不要在row-
附近放置括号
答案 2 :(得分:0)
因为match()
会返回null
或结果数组。这些结果是完整模式(\w?(row-)\d+
)以及由括号内的位表示的子模式(row-
)。也就是说,就目前而言,您的正则表达式也会匹配arrow-25
或row-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
。
同时阅读: