在javascript中使用.match的正则表达式多次带来结果
我有一个regex在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
\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>
这就是我的jsvar 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
另见:
由于捕获组,您将获得行-
。