正则笔记-表达式初识

Posted by Wason on March 7, 2019

前言

正则表达式 以 ^ 开始,以 $ 结束

在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)代表一切字符了。
$ 表示字符串的结束,/.$/ 表示在字符串结束前的任意字符。