<script> var osVersion = "Ubuntu 8";//其中的8表示系统主版本号 var re = /^[a-z]+s+d+$/i; //+号表示字符至少要出现1次,s表示空白字符,d表示一个数字 var re = /^[a-z]+s+d+$/i; alert(re.test(osVersion));//true,但我们想知道主版本号 //另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容 re=/^[a-z]+s+d+$/i; arr = re.exec(osVersion); alert(arr[0]);//将osVersion完整输出,因为整个字符串刚好匹配re //我只需要取出数字 re=/d+/; var arr = re.exec(osVersion); alert(arr[0]);//8 </script> <script> //子匹配 //exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配 re=/^[a-z]+s+(d+)$/i;//用()来创建子匹配 arr =re.exec(osVersion); alert(arr[0]);//整个osVersion,也就是正则表达式的完整匹配 alert(arr[1]);//8,第一个子匹配,事实也可以这样取出主版本号 alert(arr.length);//2 osVersion = "Ubuntu 8.10";//取出主版本号和次版本号 re = /^[a-z]+s+(d+).(d+)$/i;//.是正则表达式元字符之一,若要用它的字面意义须转义 arr = re.exec(osVersion); alert(arr[0]);//完整的osVersion alert(arr[1]);//8 alert(arr[2]);//10 </script>
Document
创建正则
创建方式:
var reg = new RegExp("a"); // 等同于 var reg = /a/; var reg = new RegExp("a","gi") // 等同于 var reg = /a/gi;
说明:
i: 忽略大小写
m: 多行查找
g: 全文查找
正则表达式的方法
- test,返回一个Boolean值,它指出在指定的字符串中是否存在RegExpObject匹配的文本
- exec,返回值是一个数组,其中存放匹配结果,未找到返回null
- compile,把正则表达式编译成内部格式从而执行更快
正则表达式的属性
- source,只读返回模式匹配所对应的文本
- input,只读返回执行规范表述查找的字符串
- lastMatch,只读返回任何正则表达式搜索过程中的最后匹配的字符
- leftContext,只读返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符
- rightContext,只读返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符
- lastIndex,返回字符位置,声明是上一次匹配文本之后的第一个字符的位置,上一次匹配结果是由方法reg.exec()和reg.test()找到的,他们都以lastIndex属性所指的位置作为下一次检索的起始点。这样就可以反复通过调用这两个方法来遍历字符串的所有匹配文本
提示:
1、不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性
2、如果成功匹配一个字符之后就开始检索另一个新的字符串,需要手动设置lastIndex为0
3、匹配失败之后 lastIndex 为0
String对象对应的一些和正则表达式相关的方法
- match,找到一个或者多个正则表达式的匹配,看是否是全局查找 返回结果["a", index:0,input:"abcdefg"] || null 或者是["a","a","a"]
- replae,替换与正则表达式匹配的子串
- search,检索与正则表达式相匹配的值
var osVersion = "Ubuntu 8";//其中的8表示系统主版本号 var re = /^[a-z]+s+d+$/i; //+号表示字符至少要出现1次,s表示空白字符,d表示一个数字 alert(re.test(osVersion));//true,但我们想知道主版本号 //另一个方法exec,返回一个数组,数组的第一个元素为完整的匹配内容 re=/^[a-z]+s+d+$/i; arr = re.exec(osVersion); alert(arr[0]);//将osVersion完整输出,因为整个字符串刚好匹配re //我只需要取出数字 re=/d+/; var arr = re.exec(osVersion); alert(arr[0]);//8
正则会有子匹配 用() 和 ()分离 组成一个数组 ()对应第index+1
()分组 正则匹配大正则 再匹配小正则 捕获 (?:)?:表示 只匹配 不捕获
? 非贪婪模式查找 放在量词后面
var reg = /d{2,5}/; var str = "s414545455" reg.exec(str); // 41454 var reg = /d{2,5}?/; reg.exec(str); // 41
?= 正向预测 条件运算 判断以"web"结尾的字符串
var reg = /[a-z]+(?:d{2,})(?=web)/ var str = "sdfdf215115websdf"; reg.exec(str);
?! 负向预测 条件运算 判断不是以"web"结尾的字符串
var reg = /[a-z]+(?:d{2,})(?!web)/ var str = "sdfdf215115webfdf"; reg.exec(str);
[] 表示多个中的一个 []+ 表示多个