关于正则的*和?的实际应用

图片描述

var str='33a64727198'
console.log(/j?/g.test(str))
console.log(/3?/g.test(str))
都输出true ..
请问这两个符号存在的意义是>??

阅读 2.5k
3 个回答

你可能把 理解为单个字符只能出现一次,比如:

var str='33a64727198'
console.log(/3?/g.test(str))  //它匹配的不是3在字符串中最多出现1次

而是去匹配字符的时候,该字符只能在匹配结果中出现0-1次。

var str = 'abbc'
console.log(/ab?c/.test(str1))  // 输出false

var str = 'abc'
console.log(/ab?c/.test(str))  // 输出true

你可以使用 str.match(reg) ,这个可以输出你正则匹配的结果

var str='33a64727198'

str.match(/3*/g) 
str.match(/3?/g)
新手上路,请多包涵

/3?/g 可以当作 /3|/g
即匹配 /3/g 或 //g 其一
任何字符串匹配//g都返回true

var str='红富士苹果'
console.log(/青?/g.test(str)) // true
console.log(/红?/g.test(str)) // true
可以是青的也可以不是青的就等价于可以是红的也可以不是红的,所以/青?/g等价于/红?/,但是很明显这样的正则判断没有意义,即可能存在也可能不存在,那还判断什么。。。

再看
var str='红苹果'
console.log(/^青?苹果$/.test(str)) // false
console.log(/^红?苹果$/.test(str)) // true
这样就看出了两个正则的区别了,第一个正则匹配的要么是青苹果要么是苹果,第二个正则匹配要么是红苹果要么是苹果。正则是工具,要匹配的字符串是结果,不同的工具在某些时候可以获取相同的结果,但我们关注的重点是只要结果是正确的就行了。*号同理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题