正则表达式不计算属于 * 量词的字符。
正则表达式不计算属于 * 量词的字符。
正则表达式:/([a-z][0-9]*){6,12}/i
所以我期望如果一个字符串包含超过6个字符且少于12个字符,即使没有6个字母字符,也会返回true,但实际上并没有,我希望"123456789a"返回true,而"abcdefghi1"不返回,但第一个并没有返回。
var myRegEx = /([a-z][0-9]*){6,12}/i; function checkIt() { var myString = document.getElementsByTagName("input")[0].value; if(myRegEx.test(myString) == true) { document.getElementsByTagName("p")[0].className = "trueOrFalse true"; document.getElementsByTagName("p")[0].innerHTML = "True"; } else { document.getElementsByTagName("p")[0].className = "trueOrFalse false"; document.getElementsByTagName("p")[0].innerHTML = "False"; } }
正则表达式在计算字符数量时不会考虑*量词中的字符的原因是,*量词表示匹配前面的字符零次或多次。因此,正则表达式引擎在计算字符数量时将*量词视为一个整体,而不会将其中的字符计算在内。
为了解决这个问题,我们可以在正则条件的周围加上对字符串长度的检查。通过使用if语句和字符串的length属性,我们可以确保只有在字符串长度满足特定条件时才执行正则表达式匹配。
下面是一个示例代码,展示了如何在正则表达式条件周围进行字符串长度检查的方法:
if (string.length > 6 && string.length < 12) { // 在这里放置你的正则表达式... }
在上述示例中,我们使用了JavaScript作为代码语言,但这个方法同样适用于其他编程语言中的正则表达式。
通过将字符串长度的检查与正则表达式条件结合起来,我们可以确保只有在满足特定字符串长度要求时才执行正则表达式匹配,从而解决了正则表达式不计算*量词中字符数量的问题。
正则表达式不计算作为*量词的一部分的字符
问题原因:
我想要的正则表达式返回true的条件是:字符串中有超过6个但少于12个字母字符或字母和数字字符的组合,但不能只有数字字符。
我可以通过"/([a-z][0-9]*){6,12}/i"来实现这一点,但问题是数字不被计算在内,所以只有当至少有6个a-z字符时才返回true,我希望即使只有一个a-z字符和其他都是数字,也能返回true。
解决方法:
正确的正则表达式是:
var myRegEx = /^[0-9]{6,11}[a-z]{1}$/i;
我们搜索6到12个数字加上一个字符的精确匹配
/^[0-9]{6,11}[a-z]{1}$/i; ^ ^ ^ ^ | | | |_ 字符串的结尾 | | | | | |_ 从6个最小到11个最大的重复次数 | | | |_ 数字0-9包括所有数字 | |_ 字符串的开头