format : function(format){
var args = Array.prototype.slice.call(arguments, 1); 

return format.replace(/\...{(\d+)\}/g,
function(m,i)...{return args[i]; });
}
var template='<div style=\'color:red;\'>{0}</div>'+ 

'<div style=\'color:red;\'>...{1}</div>';
var result=String.format(template, '张三','1983-09-24');表6-1传统NFA运行原理分析
|
次数 |
说明 |
|
第一次 |
首先根据表达中首字符p从给定字符串找到首个匹配p的字符,其位置为2,接着判断r?是否匹配接下来的p字符,满足且不占位,继续判断k否匹配该p字符,不满足就标识第一个p字符的位置,如op|propkprkpk。 |
|
第二次 |
从给定字符串中标识的位置之后重新查找到首个匹配p的字符,在其位置为3,接下来判断r?是否满足接下来的r,满足且占位,然后用k来匹配给定字符串中接下来o字符,不满足,标识第二个p字符的位置,如opp|ropkprkpk。 |
|
第三次 |
从给定字符串中标识的位置之后重新查找到首个匹配p的字符,其位置为6,接着判断r?是否匹配接下来的k字符,满足且不占位,继续判断k否匹配该k字符,满足,匹配完成。返回匹配结果pk字符串。 |
|
步骤 |
位置 |
说明 |
|
第1步:o |
1 |
判断其是否和正则表达式中首个p字符匹配,否,进行第2步。 |
|
第2步:p |
2 |
判断其是否和正则表达式中首个p字符匹配,是,接下判断其后p字符是否和正则表达式p字符之后的r?相配,是且不占位,其继续和正则表达式k字符进行匹配,否,进行第3步。 |
|
第3步:p |
3 |
判断其是否和正则表达式中首个p字符匹配,是,接下判断其后r字符是否和正则表达式p字符之后的r?相配,是且占位,接下判断其后o符是否和正则表达式k字符进行匹配,否,进行第4步。 |
|
第4步:r |
4 |
判断其是否和正则表达式中首个p字符匹配,否,进行转第5步。 |
|
第5步:o |
5 |
判断其是否和正则表达式中首个p字符匹配,否,进行转第6步。 |
|
第6步:p |
6 |
判断其是否和正则表达式中首个p字符匹配,是,接下判断其后r字符是否和正则表达式p字符之后r?相配,是且不占位, 其继续和正则表达式k字符进行匹配,是则保存匹配pk,进行第7步。 |
|
第7步:k |
7 |
判断其是否和正则表达式中首个p字符匹配,否,进行第8步。 |
|
第8步:p |
8 |
P和表达式中p相配,接着判断其后的r是否和r?相配,满足,接着采用k和r?之后的k进行判断。满足。把prk保存起来。进行第9步。 |
|
第9步:r |
9 |
判断其是否和正则表达式中首个p字符匹配,否,进行第10步。 |
|
第10步:k |
10 |
判断其是否和正则表达式中首个p字符匹配,否,进行第11步。 |
|
第11步:p |
11 |
判断其是否和正则表达式中首个p字符匹配,是,接下判断其后r字符是否和正则表达式p字符之后r?相配,是且不占位, 继续和正则表达式k字符进行匹配,是,保存匹配pk,进行第12步。 |
|
第12步:k |
12 |
判断其是否和正则表达式中首个p字符匹配,否,进行第13步。 |
|
第13步 |
结束 |
从三个结果中找到第一个最长的字符串prk返回。 |
|
\b 后退一格(Backspace) |
\f 换页(Form Feed) |
|
\n 换行(New Line) |
\r 返回(Carriage Return) |
|
\t 制表(Tab) |
\\ 反斜线(Backslash) |
|
\' 单引号 |
\" 双引号 |
|
\uFFFF unicode字符 |
\x23 ASCII码字符 |
|
字符 |
单词记忆 |
匹配 |
|
[...] |
|
位于括号之内的任意字符 |
|
[^...] |
|
不在括号之中的任意字符 |
|
. |
|
除了换行符之外的任意字符,等价于[^\n] |
|
\w |
word |
等价于[a-zA-Z0-9] |
|
\W |
word |
任何非单字字符,等价于[^a-zA-Z0-9] |
|
\s |
space |
任何空白符,等价于[\t\n\r\f\v] |
|
\S |
space |
任何非空白符,等价于[^\t\n\r\f\v] |
|
\d |
digit |
任何数字,等价于[0-9] |
|
\D |
digit |
除了数字之外的任何字符,等价于[^0-9] |
|
[\b] |
backspace |
一个退格直接量(特例) |
escapeRe : function(s) { return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1");},|
字符 |
含义 |
|
{n, m} |
匹配前一项至少n次,但是不能超过m次 |
|
{n, } |
匹配前一项n次,或者多次 |
|
{n} |
匹配前一项恰好n次 |
|
? |
匹配前一项0次或1次,也就是说前一项是可选的. 等价于{0, 1} |
|
+ |
匹配前一项1次或多次,等价于{1,} |
|
* |
匹配前一项0次或多次.等价于{0,} |
|
表达式 |
匹配结果 |
|
(a)(\w+) |
"\w+" 将匹配第一个 "a" 之后的所有字符 "xxxaxxxa" |
|
(a)(\w+)(a) |
"\w+" 将匹配第一个 "a" 和最后一个 "a" 之间的所有字符 "xxxaxxx"。 |
|
分类 |
表达式 |
作用 |
|
选择 |
| |
左右两边表达式之间 "或" 关系,匹配左边或者右边 |
|
分组 |
( ) |
做为一个单元整体来进行操作。 |
|
引用 |
\n |
n为数字,它是用来引用表达式前面第n个子表达式内容。 |
表6-8 正向相等预查
|
次数 |
说明 |
|
1 |
判断43是否满足表达式,满足,把满足的4保存,其下一次查询的开始位置为'4|3445333336323'中的|处。说明其预查的3要判断其满足,但是不占位 |
|
2 |
接下来34,44,45都不满足。53满足,保存5。位置为'43445|333336323'。 |
|
3 |
现在5后面的33是满足的。那么保存3,其位置为'434453|33336323'。 |
|
4 |
其它步骤相似。 |
|
字符 |
说明 |
|
^ |
匹配的是字符的开头,在多行检索中,匹配的是一行的开头 |
|
$ |
匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾 |
|
\b |
匹配的是一个词语的边界。位于也就是指单词和空格间位置,不匹配空格。 |
|
\B |
匹配的是非词语的边界的字符 |
|
操作符 |
描述 |
|
\ |
转义符 |
|
()、 (?:)、 (?=)、(?!)、[] |
圆括号和方括号 |
|
*、 +、? 、{n}、{n,} 、{n,m} |
限定符 |
|
^、$、\b、\B |
位置和顺序 |
|
| |
“或”操作 |
|
函数 |
说明 |
|
RegExpObj.test(str) |
用于检测一个字符串是否匹配指定正则表达式。匹配返回 true,否则返回 false。 |
|
RegExpObj.exec(str) |
用于检索字符串中的正则表达式的匹配。返回一个数组,存放匹配的结果。如果未找到匹配,则返回值为 null。 |
|
stringObj.match(regexp) |
判断字符串是否与参数中指定的正则表达式相匹配。返回存放匹配结果的数组。 |
|
stringObj.replace(regexp,str) |
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配子串。 |
|
stringObj.search(regexp) |
用于检索字符串中指定子字符串,或检索与正则表达式相匹配子串。返回首个匹配子串起始位置,没有找到就返回 -1。因采用string构建,/之上要多加一个/号。 |
|
stringObj.split(sep, h) |
通过指定分隔符把字符串分割成字符串数组。该分隔符可以通过正则表达式指定。 |
表6.12 replace中替换内容的标识
|
字符 |
替换文本 |
|
$1、$2、...、$99 |
与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
|
$& |
与 regexp 相匹配的子串。 |
|
$` |
位于匹配子串左侧的文本。 |
|
$' |
位于匹配子串右侧的文本。 |
|
$$ |
直接量符号。 |
var mm="{first:u0012},{second:u0023},{third:u0024}"; ①


var m1=mm.replace(/...{(\w*):(\w*)}(?=(,?))/g,"当前匹配字符串是\"$&\", ②
其中...{$1:$2}之前内容为\"$`\",其后内容为\"$'\"。<br/>");
document.write(m1+"<br/>");

var dd=function(match,sub1,sub2,start,whole)...{ ③
var m="\""+match+"\"位于\""+whole+"\"中第"+start+"处。";
m=m+"它包含\""+sub1+"\"和\""+sub2+"\"。<br/>";
return m; };


var m2=mm.replace(/...{(\w*):(\w*)} (?=(?:,?))/g,dd); ④
document.write(m2);