前言
正则表达式 以 ^ 开始,以 $ 结束
在JavaScript中,可以直接定义 var 变量名 = /……/; 以正斜线包含来表示。
也可 var 变量名 = /^…….$/;
正文
举例
① 反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力 查找重复的单词:
var str = "Is is the cost of of gasoline going up up";
var patt1 = /\b([a-z]+) \1\b/ig;
document.write(str.match(patt1));
结果:Is is,of of,up up
注:
- \b…\b 字符的开始和结束;
- \d 表示数字 ;
- \s表示任意空白符;
- \w 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’
<font color=#ff0000> 正则表达式中的小括号”()”是代表分组的意思, 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同, \1必须与小括号配合使用;</font>
正则表达式后面的全局标记:
-
<font color=#ff0000>i</font> 不区分大小写
-
<font color=#ff0000>g</font> 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配.
②输出所有匹配的数据:
var str = "http://www.runoob.com:80/html/html-tutorial.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
document.write(arr[i]+"</br>");
}
结果:
http://www.runoob.com:80/html/html-tutorial.html
http
www.runoob.com
:80
/html/html-tutorial.html
注:
第一个括号子表达式捕获 Web 地址的协议部分。该子表达式匹配在冒号和两个正斜杠前面的任何单词。
第二个括号子表达式捕获地址的域地址部分。子表达式匹配 / 和 : 之外的一个或多个字符。
第三个括号子表达式捕获端口号(如果指定了的话)。该子表达式匹配冒号后面的零个或多个数字。只能重复一次该子表达式。
最后,第四个括号子表达式捕获 Web 地址指定的路径和 / 或页信息。该子表达式能匹配不包括 # 或空格字符的任何字符序列
在 "( )"中的 "[ ]" 的表示需要匹配的内容范围,其中
若没有加 ^ 表示需要匹配[ ]中的内容;
若有加 ^ 页信则表示[ ]中的内容不用匹配。
即 有 ^ 不匹配。
正则方法
test()方法: 用于检测一个字符串是否匹配某个模式. 返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
`
regexp.test(str)
`
<font color=#FF0000>每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置.</font>
var re = /^[1-9]{4,10}$/gi;
var str = "123456";
alert(re.test(str)); //返回true
执行上面的 test 之后我们可以弹出
alert(re.lastIndex); // 弹出6
即表示上一次在第6个字符之后结束 那么下一次再调用 test 的时候, 就会从第6个字符之后继续搜索!!
<font color=#ff0000>解决办法:</font> 将正则表达式的 lastIndex 属性设置为0, 具体代码如下
<script type="text/javascript">
var re = /^[1-9]{4,10}$/gi;
var str = "123456";
alert(re.test(str)); //返回true
re.lastIndex=0;
alert(re.test(str)); //返回true
</script>

上图的一点小tip
① . 字符可以配置除4个“行终止符”以外的任意字符,但在ES6给正则加上/s字符后,便可以用点(dot)代表一切字符了。
② $ 表示字符串的结束,/.$/ 表示在字符串结束前的任意字符。