正则表达式-开始结束符

阅读: 17455    发布时间: 2018-01-26 15:34:28

上节我们写的一个关于匹配手机号的例子,我们匹配第一位是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'。


-END-