<script>
window.onload = function(){
/*
\b \B (?=N) (?!N) ^ $ 匹配的都是位置,如果前后有字符 则匹配位置上的字符;
所有匹配都是尽可能多的匹配 ,如果需要尽可能少的匹配 则可以在表达式后加上"?" ;
*/
//test();
//zhongkuohao();
quantifier();
}
/*
量词:
n+ :至少一个n
n? :零个或者一个 //经常这样用 某字符后有0或1个另一字符的匹配 例如:to? "toaptoot"
n* :零个或者多个 //如果 这样用 w* ,u* 意味着 对空匹配后跟零个或多个w,u的字符 会返回很多空串
n{X}:匹配包含X个n的字符串 并返回X个n
n{X,Y}匹配包含X个至Y个n的字符串
n{X,} 至少X个
n$ :结尾为n的字符串 //无则返回null 有则返回匹配字符 例如 on$ "moon won" 返回 "on" 注:匹配字符串结尾 而不是其中的某个单词的结尾
^n :开头为n的字符串 //无返回null 有则返回匹配字符 例如 ^is "is this yours?" 返回"is" 注:匹配字符串开头 而不是其中的某个单词的开头
?=n 其后紧跟n的字符串 //用法:all(?= lo) 查找其后紧跟" lo"的all字符串 找到 返回"all" 找不到返回null 下同
?!n 其后不紧跟n的字符串
*/
function quantifier(){
var text = 'aan';
var regex = /(?=aa)/g;
var match = regex.exec(text);
console.log(text.match(regex)); // logs 'First'
console.log(regex.lastIndex);
/* var regExp = new RegExp("(n|u)","gi");
var str = "3NUL01w\01\|\r\t\v\f\\03sbcskyyghiNnUULL中pq won * \n123n moon aky" ;
console.log(str.match(regExp));
console.log(regExp); */
}
function zhongkuohao(){
/*
范围[]:
[abcijk] : 括号中任意的字符
[^abcijk]: 括号中字符之外的任意字符
[0-9]: 0到9之间的任意数字
[a-z]: a到z之间的任意的字符
[A-Z]: A到Z之间的任意的字符
[A-z]: A到z之间的任意的字符
[^a-z]: a到z之外任意字符
[a|z|s]: 括号中任意的字符 //此处的|并非或 而是字符 同样会被匹配
(a|z|s): 括号中的| 代表是或 不会被匹配 //小括号即分组 每一个小括号\1,\2,\3...从左至右排序 \1代表分组1匹配的字符 例如:(\w+)\\n\1 匹配 yao\nyao
元字符:
. : 点字符 代表任意的单个字符 换行 结束符除外 //故.不能放置到范围符号[]中
\d: 查找数字 new RegExp("\\d","g") /\d/g
\D: 非数字字符
\w: 查找单词字符 //什么是单词字符那? 数字和英文 字母 即[0-9]和 [A-z]和_结合体
\W: 查找非单词字符 即除了[0-9]和 [A-z]和_之外的 字符
\s: 查找空白/间隙字符 \r \t \v \f \n 空格 均能匹配
\S: 查找非空白字符
\b: 查找单词边界 即查找紧挨着非数字和英文字母字符的字符 new RegExp("\\b3","g"); \b位置在左边 则找左边边界为3的字符,反之,则找右边的
\B: 查找非单词边界
\0: 查找不与数字挨着的\0
\t: 查找制表符
\n: 查找换行符
\f: 查找换页符
\r: 查找回车符
\v: 查找垂直制表符
\xxx:查找8进制的对应的字符 例如 \127 转换2进制是87 即 W
\xdd:查找16进制对应的字符 \x57 转换2进制是87 即 W
\uxxxx:查找16进制对应的Unicode字符 \u0057 即 W
*/
//var regExp =new RegExp("[^a-z]","g");
var regExp =new RegExp("\\w","g");
var str = "3NUL01w\01\|\r\t\v\f\\03sbcskghiNULL中pqw* \n123" ;
console.log(str.match(regExp));
}
function test(){
//当 RegExp(pattern, attributes); 当pattern为字符/字符串时候,attributes可用,当pattern为RegExp对象时,必须忽略attributes参数,否则包TypeError
//pattern 不是合法的正则或者 attrs为 i g m 之外的字符 报 SyntaxError
//i 忽略大小写 g全局(查找所有符合的) m 多行匹配
var regExp = new RegExp("he","g");
//var test =RegExp("/d");
var str = "hellochain123hello"+"\r\n"+"iihe";
document.write(str);
//var result;
console.log(regExp);
//console.log( test);
console.log(regExp.exec(str));
console.log(regExp.exec(str));
console.log(regExp.exec(str));
/*
RegExp对象的exec()方法:
无匹配,返回null
有匹配,则分两种情况 :
attributes为非全局
attributes不等于g时,返回的数组 和String.match(Object RegExp)返回的一样,返回匹配的字符(只匹配第一个),
但是还有一个index属性(匹配字符的索引)和一个input属性(目标字符串)
attributes为全局(g)
attributes等于g时,String.match(Object RegExp)返回的是所有的匹配字符的数组,而exec()则返回的与全局相同,但是每调用一次
其返回的数组的index属性就会更改为匹配的字符的索引,而RegExp对象的lastIndex属性相应的更改为匹配到的字符的下一字符的索引
例如:
var regExp = new RegExp("llo","g");
var str = "hellochain123hello33";
regExp.exec(str) //返回 Array [ "llo", index:2,input:hellochain123hello33] regExp.lastInde=5
regExp.exec(str) //返回 Array [ "llo", index:15,input:hellochain123hello33] regExp.lastInde=18
str.match(regExp) //返回 Array [ "llo","llo"]
*/
/* console.log(regExp.exec(str));
console.log(regExp.lastIndex);
console.log(regExp.exec(str));
console.log(regExp.lastIndex); */
/*
RegExp对象的test()方法:
这个方法比较简单 ,当regExp对象匹配地字符被包含在比对的字符串中,则返回true 否则返回false
注意:
如果之前之前调用过regExp.exec(str)方法进行全局匹配至字符串末时,再调用test()方法,纵然此时目标字符串中有匹配的字符时,
仍然返回false,这是因为此时的RegExp对象的lastIndex值索引后再无匹配字符,而regExp对象是从lastIndex开始匹配的,
故需将lastIndex重置为0,或者任意匹配字符的前方索引即可
*/
//console.log(regExp.test(str));
}
</script>
window.onload = function(){
/*
\b \B (?=N) (?!N) ^ $ 匹配的都是位置,如果前后有字符 则匹配位置上的字符;
所有匹配都是尽可能多的匹配 ,如果需要尽可能少的匹配 则可以在表达式后加上"?" ;
*/
//test();
//zhongkuohao();
quantifier();
}
/*
量词:
n+ :至少一个n
n? :零个或者一个 //经常这样用 某字符后有0或1个另一字符的匹配 例如:to? "toaptoot"
n* :零个或者多个 //如果 这样用 w* ,u* 意味着 对空匹配后跟零个或多个w,u的字符 会返回很多空串
n{X}:匹配包含X个n的字符串 并返回X个n
n{X,Y}匹配包含X个至Y个n的字符串
n{X,} 至少X个
n$ :结尾为n的字符串 //无则返回null 有则返回匹配字符 例如 on$ "moon won" 返回 "on" 注:匹配字符串结尾 而不是其中的某个单词的结尾
^n :开头为n的字符串 //无返回null 有则返回匹配字符 例如 ^is "is this yours?" 返回"is" 注:匹配字符串开头 而不是其中的某个单词的开头
?=n 其后紧跟n的字符串 //用法:all(?= lo) 查找其后紧跟" lo"的all字符串 找到 返回"all" 找不到返回null 下同
?!n 其后不紧跟n的字符串
*/
function quantifier(){
var text = 'aan';
var regex = /(?=aa)/g;
var match = regex.exec(text);
console.log(text.match(regex)); // logs 'First'
console.log(regex.lastIndex);
/* var regExp = new RegExp("(n|u)","gi");
var str = "3NUL01w\01\|\r\t\v\f\\03sbcskyyghiNnUULL中pq won * \n123n moon aky" ;
console.log(str.match(regExp));
console.log(regExp); */
}
function zhongkuohao(){
/*
范围[]:
[abcijk] : 括号中任意的字符
[^abcijk]: 括号中字符之外的任意字符
[0-9]: 0到9之间的任意数字
[a-z]: a到z之间的任意的字符
[A-Z]: A到Z之间的任意的字符
[A-z]: A到z之间的任意的字符
[^a-z]: a到z之外任意字符
[a|z|s]: 括号中任意的字符 //此处的|并非或 而是字符 同样会被匹配
(a|z|s): 括号中的| 代表是或 不会被匹配 //小括号即分组 每一个小括号\1,\2,\3...从左至右排序 \1代表分组1匹配的字符 例如:(\w+)\\n\1 匹配 yao\nyao
元字符:
. : 点字符 代表任意的单个字符 换行 结束符除外 //故.不能放置到范围符号[]中
\d: 查找数字 new RegExp("\\d","g") /\d/g
\D: 非数字字符
\w: 查找单词字符 //什么是单词字符那? 数字和英文 字母 即[0-9]和 [A-z]和_结合体
\W: 查找非单词字符 即除了[0-9]和 [A-z]和_之外的 字符
\s: 查找空白/间隙字符 \r \t \v \f \n 空格 均能匹配
\S: 查找非空白字符
\b: 查找单词边界 即查找紧挨着非数字和英文字母字符的字符 new RegExp("\\b3","g"); \b位置在左边 则找左边边界为3的字符,反之,则找右边的
\B: 查找非单词边界
\0: 查找不与数字挨着的\0
\t: 查找制表符
\n: 查找换行符
\f: 查找换页符
\r: 查找回车符
\v: 查找垂直制表符
\xxx:查找8进制的对应的字符 例如 \127 转换2进制是87 即 W
\xdd:查找16进制对应的字符 \x57 转换2进制是87 即 W
\uxxxx:查找16进制对应的Unicode字符 \u0057 即 W
*/
//var regExp =new RegExp("[^a-z]","g");
var regExp =new RegExp("\\w","g");
var str = "3NUL01w\01\|\r\t\v\f\\03sbcskghiNULL中pqw* \n123" ;
console.log(str.match(regExp));
}
function test(){
//当 RegExp(pattern, attributes); 当pattern为字符/字符串时候,attributes可用,当pattern为RegExp对象时,必须忽略attributes参数,否则包TypeError
//pattern 不是合法的正则或者 attrs为 i g m 之外的字符 报 SyntaxError
//i 忽略大小写 g全局(查找所有符合的) m 多行匹配
var regExp = new RegExp("he","g");
//var test =RegExp("/d");
var str = "hellochain123hello"+"\r\n"+"iihe";
document.write(str);
//var result;
console.log(regExp);
//console.log( test);
console.log(regExp.exec(str));
console.log(regExp.exec(str));
console.log(regExp.exec(str));
/*
RegExp对象的exec()方法:
无匹配,返回null
有匹配,则分两种情况 :
attributes为非全局
attributes不等于g时,返回的数组 和String.match(Object RegExp)返回的一样,返回匹配的字符(只匹配第一个),
但是还有一个index属性(匹配字符的索引)和一个input属性(目标字符串)
attributes为全局(g)
attributes等于g时,String.match(Object RegExp)返回的是所有的匹配字符的数组,而exec()则返回的与全局相同,但是每调用一次
其返回的数组的index属性就会更改为匹配的字符的索引,而RegExp对象的lastIndex属性相应的更改为匹配到的字符的下一字符的索引
例如:
var regExp = new RegExp("llo","g");
var str = "hellochain123hello33";
regExp.exec(str) //返回 Array [ "llo", index:2,input:hellochain123hello33] regExp.lastInde=5
regExp.exec(str) //返回 Array [ "llo", index:15,input:hellochain123hello33] regExp.lastInde=18
str.match(regExp) //返回 Array [ "llo","llo"]
*/
/* console.log(regExp.exec(str));
console.log(regExp.lastIndex);
console.log(regExp.exec(str));
console.log(regExp.lastIndex); */
/*
RegExp对象的test()方法:
这个方法比较简单 ,当regExp对象匹配地字符被包含在比对的字符串中,则返回true 否则返回false
注意:
如果之前之前调用过regExp.exec(str)方法进行全局匹配至字符串末时,再调用test()方法,纵然此时目标字符串中有匹配的字符时,
仍然返回false,这是因为此时的RegExp对象的lastIndex值索引后再无匹配字符,而regExp对象是从lastIndex开始匹配的,
故需将lastIndex重置为0,或者任意匹配字符的前方索引即可
*/
//console.log(regExp.test(str));
}
</script>