我有一个字符串,可以是逗号分隔的\w
列表,例如:
我正在尝试查找将返回['abc123']
(第一种情况)或['abc123', 'def456', 'ghi789']
(不使用逗号)的JavaScript正则表达式。
我试过了:
^(\w+,?)+$
- 不,因为只有最后一个重复模式匹配,789 ^(?:(\w+),?)+$
- 同样的故事。我正在使用非捕获支架。但是,对于重复的单词我正在尝试用regexp做什么?我尝试了几乎所有分组的组合,使用捕获和非捕获括号,但仍然无法实现这一点......
答案 0 :(得分:2)
如果你想在出现问题时丢弃整个输入,最简单的方法是验证,然后拆分:
if (/^\w+(,\w+)*$/.test(input)) {
var values = input.split(',');
// Process the values here
}
如果您想允许空值,请将\w+
更改为\w*
。
尝试使用单个正则表达式同时匹配和验证需要模拟\G
功能,该功能断言最后一个匹配的位置。为什么需要\G
?因为它会阻止引擎在下一个位置重试匹配并绕过验证。请记住,ECMA脚本正则表达式没有后视,因此您无法区分无效字符的位置和后面的字符:
something,=bad,orisit,cor&rupt
^^ ^^
如果无法区分这两个位置,则不能单靠引擎进行全匹配操作。虽然可以使用RegExp.exec
的while循环并自己断言最后一个匹配的位置,但为什么在有更清晰的选项时会这样做呢?
如果你想野蛮一切,torazaburo's answer是一个可行的选择。
答案 1 :(得分:1)
答案 2 :(得分:0)
首先在逗号上拆分,然后过滤掉不匹配的结果:
str.split(',').filter(function(s) { return /^\w+$/.test(s); })
答案 3 :(得分:0)
此正则表达式模式在新行中分隔数值,该新行包含.
,,
,#
等特殊字符。
var val = [1234,1213.1212, 1.3, 1.4]
var re = /[0-9]*[0-9]/gi;
答案 4 :(得分:0)
var str = "abc123,def456, asda12, 1a2ass, yy8,ghi789";
var re = /[a-z]{3}\d{3}/g;
var list = str.match(re);
document.write("<BR> list.length: " + list.length);
for(var i=0; i < list.length; i++) {
document.write("<BR>list(" + i + "): " + list[i]);
}
&#13;
这只会得到&#34; abc123&#34;列表中的代码样式,没有别的。
答案 5 :(得分:-1)
可以使用拆分功能
var st = "abc123,def456,ghi789";
var res = st.split(',');