正则表达式

正则表达式基本语法有两种

1.直接量语法

    /patten/attributes

2.创建RegExp对象的方法

    new RegExp(pattern, attributes)

patten: 字符串,  attributes:可选, 包含i, g, m


支持正则的String方法

1. search(),  检索指定字符串, 返回位置,  忽略全局匹配

2. match(),  检索指定的值

    普通情况,返回匹配成功的数组, 数组内三个元素, [匹配的文本, index:起始位置, input:调用次方法的字符串]

    全局匹配时, 返回数组, 数组中存放匹配到的值

    例:

var str = "hello world";
console.log(str.match("hello")); // ["hello", index: 0, input: "hello world"]

// 全局匹配
var str2="1 plus 2 equal 3"
console.log(str2.match(/\d+/g)); //["1", "2", "3"]


3.replace()

4.split()    把一个字符串分割成字符串数组

    基本语法: stringObject.split(separator, howmany)

    参数: separator 必填, 在指定的地方分割

                howmany 选填, 数组的最大长度

例:    

        var str = "what are you doing?"

        console.log(str.split(" "))    // => ["what", "are", "you", "doing?"]

 // 以 "" 分割字符串
console.log(str.split(""));
/*
 * 打印:["w", "h", "a", "t", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", 
 * "g", "?"]
 */
// 指定返回数组的最大长度为3
console.log(str.split("",3));
// 打印 ["w", "h", "a"]

RegExp 对象方法

1.test(), 用于检测一个字符串是否匹配某个模式

    基本语法:    RegExpObject.test(str)        返回true或者false


2.exec(), 检索字符串中的正则表达式的匹配

    基本语法:    RegExpObject.exec(string)

    返回一个数组,存放匹配的结果, 未找到匹配则返回null,  匹配成功时, 返回的数组中第一个元素为匹配到的字符串, 后面的参数为匹配到的分组, 然后是 index(起始位置) 和 input(匹配的字符串)

var str = "longen and yunxi";
console.log(/longen/.exec(str)); 
// 打印 ["longen", index: 0, input: "longen and yunxi"]

// 假如没有找到的话,则返回null
console.log(/wo/.exec(str)); // null


[]的含义

    [abc]    查找在方括号中任意一个字符

    [^abc]    查找不在方括号中的任意一个字符

    [0~9]    查找0~9中的任意一个数字

    (a|b|c)    查找小括号中任意一项

例:

    var str = "abcde"

    console.log(str.match( /[bcd][bcd]/ ))        //=> ["bc", index:1, input:"abcde"]


元字符

.    查找任意的单个字符, 除换行符

\w    任意一个字母或数字或下划线

\W   非单词的字符, 与\w相反

\d    数字字符    0~9

\D    非数字字符

\s     匹配任何空白字符, 等价于[\f\n\r\t\v]

\S    匹配任何非空白字符

\b    匹配一个单词边界, 比如 ' er\b ' 可以匹配 ' nerver ' 中的 'er' , 但是不能匹配 'verb' 中的 'er'

\B    匹配非单词边界

\0    查找NUL字符

\n    匹配一个换行符

\f    换页符

\r    回车符

\t    制表符

\v    垂直制表符

\xxx    查找一个以八进制数xxx规定的字符

\xdd    查找以16进制数dd规定的字符

\uxxxx    查找以16进制数xxxx规定的Unicode字符


转义字符

^  $  *  +  .  [  ? /  { |  需要转义


量词

n+            >0

n*            >=0

n?            0 | 1

n{x}           x个n

n{x, y}       至少x个, 至多y个

n{x, }         至少x个

n$            以n结尾

^n            以n开头

?=n          匹配其后紧接指定的n的字符串

?!=           匹配其后没有紧接指定的n的字符串

例:

    var str = "my name is longen"

    console.log(str.match( /na(?=m)/g ))        //=>  ["na"]


贪婪模式与非贪婪模式

常见的修饰贪婪模式的量词:

{x, y}   {x, }   ?   *   +

非贪婪模式,加个?

{x, y}?   {x, }?    ??    *?    +?

     

匹配原理

1.量词优先级

ab?c    会优先考虑b?,匹配abc, 如果匹配失败, 则回溯 ,匹配ac

ab??c    会优先忽略b??, 匹配ac, 如果匹配失败, 则回溯, 匹配abc


2.环视

?= 和 ?!    只匹配, 不占位


3.分组    ()

    非捕获性分组, 不存储 (?:)


4.反向引用

    获取分组匹配后保存的值

var str = "longenaabcd";
console.log(str.match(/([ab])\1/)[0]);//aa

  \1的意思是分组匹配和反向引用匹配到的值必须是一样的



参考:http://www.cnblogs.com/tugenhua0707/p/5037811.html





    









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值