JavaScript中的正则表达式

信息分类:正则表达式 来源:Internet 作者:转载并修改 返回首页

    正则表达式(RegularExpression)是用某种模式去匹配一类字符串的一个公式。简单地说,正则表达式用于描述字符串出现的规则。举个例子来说,在正则表达式中,表达式 '^' 放在第一个位置,表示字符串开头位置,当我写下^A时,便表示必须是一个开头为A的字符串,如Adam,才符合此一规则。 这个表达规则通常称为pattern。ECMAScript/JavaScript以内建的RegExp对象提供正则表达式功能。

    要创建一个正则表达式对象有两种方法:第一种方法是直接用斜线(/)括住pattern,例如 /^A/ 。注意不要用单引号或双引号括住,一旦括住,就是一个字符串而不是正则表达式对象了。"/^A/"就是错误写法,这只是一个普通字符串。第二种方法是创建一个RegExp对象,即new RegExp(pattern),参数pattern可以是一个字符串也可以是另一个RegExp对象。第一种方法只能使用常量的pattern,我们不能用斜线括住一个变量或一个字符串运算结果。如果pattern是一个变量,则必须使用第二种方法。

    RegExp对象提供两个主要方法,即exec()和test()。exec()会对字符串进行对比运算,并返回匹配的字符串。而test()则仅仅测试字符串是否符合规则,只返回true或false。此外,RegExp对象也可以作为String对象的match()、search()、replace()、split()的参数。String的match()其实就是调用RegExp的exec(),两者的结果相同。

    ECMAScript/JavaScript的正则表达式规则是以Perl的规则为范本(PHP中称为PCRE的内容)的,下面简短说明几个常见的定位符意义。

    ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
    $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"
    * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
    + 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
    ? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
    {n} 精确匹配n次。例如/A{2}/表示'A'重复两次(即'AA');/A{2,}/表示字串含有2到无数多个'A';/A{2,5}/表示含有2到5个'A'
    . 用于匹配除换行符之外的所有字符
    [...] 位于括号之内的任意字符。注意,[]仅代表一个字符,例如/[abc]/表示'a'或'b'或'c',而不是'abc'
    \ 表示转义(escaping),将其后的字符视为一般字符。例如要表示字符串中含有'/'字符时,就必须写作/\//
    \d 匹配一个字数字符,/\d/ = /[0-9]/
    \D 匹配一个非字数字符,/\D/ = /[^0-9]/

相关资源