我想测试一个无序字符串中是否有5个“3”。
例如:
var re = /3{5}/;
re.test("333334"); //returns true as expected
re.test("334333"); //returns false since there is no chain of 5 3s
什么正则表达式可以使第二行返回 true?如果正则表达式不是测试这个的最佳方式,那什么是最佳方式呢?
谢谢!
我想测试一个无序字符串中是否有5个“3”。
例如:
var re = /3{5}/;
re.test("333334"); //returns true as expected
re.test("334333"); //returns false since there is no chain of 5 3s
请尝试
(str.match(/3/g) || []).length >= 5
或者
str.split(3).length > 5
在这里str
是您想要测试的字符串。
var re = /(?:3[^3]*){5}/;
(?:...)
是非捕获括号。目的只是为了分组,以便能够将 {5}
量词因子化。捕获组将存储要稍后重用的内容(使用反向引用)。但在这里不需要。使用非捕获组显然使用更少的内存,并且速度稍快。 - Casimir et Hippolytes.replace(/[^3]/,'').length >= 5
s
。string.indexOf('33333') > -1
str.split('3')
(带引号)。已为您修复。 - Sasha Chedygovseparator
是一个RegExp
对象(它的[[Class]]
是“RegExp
”),则让R=separator
;否则让R=ToString(separator)
*”。 - Oriolsplit
方法需要使用>
而不是>=
,因为它会计算一个额外的项:''.split(3).length === 1
,'3'.split(3).length === 2
,以此类推。 - Oriol