专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Javascript教程 » 正则表达式基础:Javascript正则表达式基础 »正文

正则表达式基础:Javascript正则表达式基础

来源: 发布时间:星期一, 2009年3月2日 浏览:0次 评论:0
="t18">RegExp对象语义和使用:

检查串匹配
获取串中部分内容
在原基础上构建个新串(包括添加、删除和修改)
构建个RegExp对象主要有两种思路方法:

使用literal如/\w/g
使用构造 RegExp(/\w/)
构建RegExp对象有以下几个注意点:

literal常用来构建非runtime产生静态RegExp对象
literal的后可以直接添加flag用来对匹配执行结果进行限制常用flag包括g和i分别用来表示全局匹配(global)和忽略大小写匹配(-insensitive)
RegExp构造个参数提供该对象pattern如果pattern是个RegExp literal那么就不能提供第 2个参数(即指定flag)如果pattern是那么可以使用第 2个参数
RegExp构造常用于构建runtime产生动态RegExp对象
RegExppattern为时所有literal中”\”都必须写成”\\””\”在中需要被转义
以上两种思路方法构建个javascript对象因此/\w/ /\w/返回false

RegExp对象相关功能:

要检查匹配可以使用 regExp.test() 思路方法该思路方法检查是否匹配regExp提供pattern还可以使用 .search(regExp)思路方法如果两者不匹配将会返回-1
要获取串中部分内容可以使用 regExp.exec() 思路方法也可以使用.match(regExp)思路方法
要在原有串上构建个新通常使用.replace(searchValue, replaceValue)思路方法
RegExp对象中提供pattern语义:

RegExp可以定义多个Alternative用”|”分割该运算优先级最低因此如果存在”|”那么它首先把RegExp分割成几大部分
每个Alternative由多个term组成term分为assertion(用于位置限定)atom(匹配单元)带Quantier(修饰符)atom
assertion分为”^”用于匹配串开头在multiInput(即flag包含m时)也可以匹配开头”$”用于匹配串结尾在multiInput(即flag包含m时)也可以匹配结尾”\b”用于匹配个\w和\W间隔注意它并不匹配任何串中内容而只是用来判断个位置匹配情况
atom情况比较复杂我们首先来看atomQuantier可以包含* + ? {n} {m,} {m,n}其中*表示atom可以有0次或以上重复+表示1次或以上重复?表示0或1次{n}表示恰巧n次重复{m,}表示m或以上重复{m,n}表示重复次数在m和n的间(包含m和n)在以上Quantier的后还可以跟个?用来启动non-greedy模式我将在后文中介绍说明这种模式意义
atom包含patternCharacter(普通即在pattern中没有特殊语义匹配时将按照字面进行匹配)
“.” 匹配所有非line-terminator
\AtomEscape 包含数字型 \1(用于引用的前括号中匹配成功内容)引用\n \f \r \t \v \xNN \uXXXX \cX等些特殊含义如\d \D \s \S \w \W
CharacterClass包含[...]和[^...]两种形式其中可以包含很多如-、 \n等引用、\b、\d等特殊含义注意如果”-”左右有那么语义变为从某到某如果”-”左或者右没有那么”-”仅表示dash
(group)以上模式进行group就可以在group的后使用Quantier修饰
(?:group)仅作为group使用而不会记录group匹配内容从而不算在\1..\n中
(?=group)要求匹配但不会在返回匹配中包含group匹配内容
(?!group)要求不匹配且不会在返回匹配中包含group匹配内容
下面我要讲下RegExp两个比较重要运作模式:

匹配Alternative总是从左到右如果遇到第个匹配就不再尝试的后匹配

/ab|abc/.exec("abc")以上串”abc”仅匹配pattern中ab而不会去匹配abc

匹配时总是般不在Quantier后添加?都使用greedy模式添加?后使用non-greedy模式

/\w+bc/.exec("abcbcbc")匹配时\w+总是先尽可能多匹配(即greedy模式)因此它会匹配”abcbcbc”如果改为

/\w+?bc/.exec("abcbcbc")那么他会尽可能少匹配(即non-greedy模式)因此仅匹配”abc”

对于解析要求般可以使用exec或match思路方法解析如果串很大那么往往需要使用循环结构进行解析配合while等语句RegExp是很强大

对于要将现有串通过修改转变为另串时般总是使用replace思路方法这个思路方法是我觉得RegExp中最重要思路方法多态性使他具有多种形式几乎能够满足所有修改需求

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: