正则表达式中括号的多义性

  中括号在正则中称为字符组(Character class),有的书翻译为字符类,还有的翻译成字符集。我觉得字符组更好点,毕竟class在计算机属于中代表面向对象里的"类".顾名思义,字符组为一组字符,它表示在一个位置里可能出现的多种字符。注意这里强调只匹配一个位置哦。
  简单字符组
  范围字符组
  组合字符组
  排除型字符组
  字符组运算
  预定义字符组
  一、简单字符组
  示例1:[123] 可以分别匹配包含1-3这5个数的字符串。
  var reg = /[123]/
  reg.test('1') // -> true
  reg.test('2') // -> true
  reg.test('3') // -> true
  reg.test('4') // -> false
  reg.test('14') // -> true
  reg.test('25') // -> true
  reg.test('36') // -> true
  示例2:匹配 bat、cat、fat.
  var reg = /[bcf]at/
  reg.test('bat') // -> true
  reg.test('cat') // -> true
  reg.test('fat') // -> true
  二、范围字符组(Range class,与连字符 "-" 一起使用)
  上面示例1中 [123] 可以匹配字符'1', '2', '3'.如果要匹配0-9可以写成 [0123456789],但有了范围字符组更简洁了,可以写成 /[0-9]/.
  示例3:匹配数字
  var reg = /[0-9]/
  reg.test('0') // -> true
  reg.test('1') // -> true
  reg.test('2') // -> true
  …
  示例4:匹配HTML的标题标签
  var reg = /<h[1-6]>/
  reg.test('<h1>') // -> true
  reg.test('<h2>') // -> true
  reg.test('<h3>') // -> true
  reg.test('<h4>') // -> true
  reg.test('<h5>') // -> true
  reg.test('<h6>') // -> true
  reg.test('<h7>') // -> false
  reg.test('<div>') // -> false
  匹配小写英文字母可以用字符组 [a-z], 匹配大写英文字母用 [A-Z].这里最关键的是连字符 "-",不要理解为减号。 它的意义是"从什么到什么",如[a-z]理解为从 "a" 到 "z".
  需要注意几点
  1. 连字符(-)只在字符组内(中括号)才是元字符。如
  var reg = /1-5/
  reg.test('1') // -> true
  reg.test('2') // -> false,不是连字符,不包含2,3,4
  reg.test('-') // -> true, 这里 "-" 只是一个普通字符
  2. 甚至在字符组内部,它也不一定是元字符。如
  var reg1 = /[-123]/
  var reg2 = /[123-]/
  // 在字符组首部或尾部位置,仅作为一个普通字符,而不是表示范围的连字符
  reg1.test('-') // -> true
  reg2.test('-') // -> true
  此外,很多元字符在字符组内都变成了普通字符,如(^$?)等。
  中括号在正则中称为字符组(Character class),有的书翻译为字符类,还有的翻译成字符集。我觉得字符组更好点,毕竟class在计算机属于中代表面向对象里的"类".顾名思义,字符组为一组字符,它表示在一个位置里可能出现的多种字符。注意这里强调只匹配一个位置哦 www.jx-jf.com
  简单字符组
  范围字符组
  组合字符组
  排除型字符组
  字符组运算
  预定义字符组
  一、简单字符组
  示例1:[123] 可以分别匹配包含1-3这5个数的字符串。
  var reg = /[123]/
  reg.test('1') // -> true
  reg.test('2') // -> true
  reg.test('3') // -> true
  reg.test('4') // -> false
  reg.test('14') // -> true
  reg.test('25') // -> true
  reg.test('36') // -> true
  示例2:匹配 bat、cat、fat.
  var reg = /[bcf]at/
  reg.test('bat') // -> true
  reg.test('cat') // -> true
  reg.test('fat') // -> true
  二、范围字符组(Range class,与连字符 "-" 一起使用)
  上面示例1中 [123] 可以匹配字符'1', '2', '3'.如果要匹配0-9可以写成 [0123456789],但有了范围字符组更简洁了,可以写成 /[0-9]/.
  示例3:匹配数字
  var reg = /[0-9]/
  reg.test('0') // -> true
  reg.test('1') // -> true
  reg.test('2') // -> true
  …
  示例4:匹配HTML的标题标签
  var reg = /<h[1-6]>/
  reg.test('<h1>') // -> true
  reg.test('<h2>') // -> true
  reg.test('<h3>') // -> true
  reg.test('<h4>') // -> true
  reg.test('<h5>') // -> true
  reg.test('<h6>') // -> true
  reg.test('<h7>') // -> false
  reg.test('<div>') // -> false
  匹配小写英文字母可以用字符组 [a-z], 匹配大写英文字母用 [A-Z].这里最关键的是连字符 "-",不要理解为减号。 它的意义是"从什么到什么",如[a-z]理解为从 "a" 到 "z".
  需要注意几点 www.lefeng123.com
  1. 连字符(-)只在字符组内(中括号)才是元字符。如
  var reg = /1-5/
  reg.test('1') // -> true
  reg.test('2') // -> false,不是连字符,不包含2,3,4
  reg.test('-') // -> true, 这里 "-" 只是一个普通字符
  2. 甚至在字符组内部,它也不一定是元字符。如
  var reg1 = /[-123]/
  var reg2 = /[123-]/
  // 在字符组首部或尾部位置,仅作为一个普通字符,而不是表示范围的连字符
  reg1.test('-') // -> true
  reg2.test('-') // -> true
  此外,很多元字符在字符组内都变成了普通字符,如(^$?)等。

posted on 2014-04-17 13:29  程序点滴  阅读(143)  评论(0编辑  收藏  举报

全讯网   全讯网