关于匹配的问题
来源:3-30 位置匹配之首尾匹配
慕仙0287733
2020-05-22 13:42:36
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>正则表达式</title>
</head>
<body>
<script type="text/javascript">
var str1 = '123b456';
var x1 = /^\d+$/;
if(x1.test(str1)){
console.log('全是数字')
}
else {
console.log('不全是数字')
}
var str2 = '123b456';
var x2 = /^\d?$/;
if(x2.test(str2)){
console.log('全是数字')
}
else {
console.log('不全是数字')
}
</script>
</body>
</html>
请老师看下这两段代码, 第一段代码的首尾都是数字, 非数字夹在中间, 是不是可以这样理解: str1的第一个字符开始匹配x1, 一直匹配到b, 就停止了, 这时b就被x1看做是末尾字符了, 所以打印不全是数字(这里还有小问题就是在正则表达式中: 是拿字符串的每个字符依次去匹配正则表达式看是否符合条件, 还是直接用正则表达式中条件去匹配字符串,然后选取符合条件的字符呢?)
第二段代码中, 使用了\d?, 那么只能匹配0到1个数字字符, 那这样匹配到的就是12两个字符了, 但是12字符的首尾都是数字, 那打印的不应该是全是数字吗?
1回答
同学你好,对于你的问题解答如下:
使用正则表达式从左到右依次匹配字符串str1,遇到字符b时,不满条件,就会停止匹配。由于停止匹配的位置并不是字符串的结尾处,不满足正则表达式限制首尾都是数字的匹配条件,所以返回的结果是“不全是数字”
是使用正则表达式中从左到右依次匹配字符串,然后选取符合条件的字符。
^表示匹配整个字符串开始的位置, $表示匹配整个字符串结束的位置。第二段代码匹配到的两个字符确实都是数字,但是匹配的结果12结尾并不是字符串str2的结尾,所以是不符合条件的。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题