正则表达式之量词
我们知道,在正则表达式中,可以使用[0-9]或d来匹配单个数字字符,但是,如果需要验证一个更复杂的字符串呢,比如大陆地区的邮政编码。 首先,看下量词的表示形式: 量词的一般形式表:一般形式
/^[0-9]{2}$/.test('12') // => true /^[0-9]{2}$/.test('123') // => false /^[0-9]{2,5}$/.test('123') // => true /^[0-9]{2,5}$/.test('123456') // => false /^[0-9]{2,}$/.test('123456') // => true /^[0-9]{0,5}$/.test('123456') // => false /^[0-9]{0,5}$/.test('12') // => true /^[0-9]{0,5}$/.test('') // => true 注意:1、{n,m}之间的逗号后面不能出现空格,否则无法正确匹配。</font> /^[0-9]{0,5}$/.test('12') // => false 2、量词限定的出现次数一般都有明确下限,如果没有,则默认为0,所以推荐{,m}写成{0,m},这是通用的写法。 /^[0-9]{,5}$/.test('12') // => false 常用量词{n,m}是通用形式的量词,正则表达式还有3个常用的量词,分别是+、?、*,虽然形式不同于{n,m},但功能确实相同的,可以当作是“量词的简介法”。 表:常用量词
/^d+(.d+)*$/.test('123') // => true /^d+(.d+)*$/.test('123.123') // => true /^d+(.d+)*$/.test('123.123.111') // => true /^d+(.d+)*$/.test('123.') // => false /^travell?er$/.test('traveller') // => true /^<[^>]+>$/.test('<div>') // => true /^<[^>]+>$/.test('<b>') // => true /^<[^>]+>$/.test('<>') // => false /^travell?er$/.test('traveler') // => true /^travell?er$/.test('traveller') // => true 在实际开发中,很多情况用这三种表示形式几乎可以满足,因此使用频率要高于{n,m}。 点号正则中,有一个特殊的特殊的元字符,点号.,它可以匹配任意字符,除了换行符(n)。 如: new RegExp("^.*$").exec("quoted 'string '") new RegExp("^(([a-z]+)s')+$").exec("quoted 'string '") 如上,匹配的结果将会是整个字符串:"quoted 'string '",这就是我们常说的贪婪模式。 匹配优先量词匹配优先量词,顾名思义,在拿不准是否匹配某个字符时,优先尝试匹配,并且记下这个状态,以备将来“反悔”。
忽略优先量词忽略优先量词,与匹配优先量词相反,在不确定是否匹配某个字符时,会优先选择“不匹配”的状态,在尝试匹配表达式之后的字符,如果匹配失败,则再回溯,选择之前保存的“匹配的”状态,这样保证了匹配的正确性。 表:匹配优先量词与忽略优先量词
转义在正则表达式中,+、?、*等量词是特殊字符,具有特殊含义,但是有些情况下,只想表达字符自身,则需要转义,即在字符前加反斜线。对于一般形式的量词{n,m},虽然含有特殊含义的字符不止一个,但转义时只需要给{添加反斜线即可,如需要匹配{n,m},则是{n,m}。 表:各种量词的转义
除此之外,元字符点.也需要加反斜线来进行转义。 /^d+.d+$/.test("3.14") // => true /^d+.d+$/.test("3@14") // => true /^d+.d+$/.test("3.14") // => true /^d+.d+$/.test("3@14") // => false 正则分析1、密码长度在6-12个字符之间2、只能由小写字母,数字和横线组成3、开头和结尾不能为横线4、不能全部为数字5、不允许有连续(2个及以上)的横线 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |