上节我们写的一个关于匹配手机号的例子,我们匹配第一位是1,后面是10个数字的字符串,“1\d{10}”,这存在一个问题中间是手机号,两边是其他字符的也会被匹配到
var patt=/1\d{10}/ alert( patt.test("15600059988")) //返回true alert( patt.test("a15600059988b")) //返回true
我们应该指定,手机号必须是以“1”开头,以10位数字结束,改为“^1\d{10}$”,“^”匹配开始位置,必须以其后的子表达式开始;“$”匹配结束位置,必须以其前面的子表达式结束
var patt=/^1\d{10}$/ alert( patt.test("15600059988")) //返回true alert( patt.test("a15600059988b")) //返回false
再看一种情况,比如我们想匹配单词“hi”,但是像“him”,“history”也会被匹配到
var patt=/hi/ alert( patt.test("hi boy")) //返回true alert( patt.test("him")) //返回true alert( patt.test("history")) //返回true
如果我们只想匹配单词“hi”,必须在其前后添加元字符“\b”,“\b”代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置
var patt=/\bhi\b/ alert( patt.test(",hi boy")) //返回true alert( patt.test("him")) //返回false alert( patt.test("history")) //返回false
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |