自学内容网 自学内容网

正则表达式

正则表达式的构成:

  • 定界符

  • 元字符

  • 模式修正符

  • 表达式

定界符

定界符常使用斜线“/” 左斜杠 正斜杠 / / 元字符 /[修饰符] g

元字符

元字符为具有特殊含义的字符 主要用途:

  • 定义原子的筛选方式

  • 定义原子的集合

  • 定义原子数量限定

  • 定义边界控制

 元字符之原子的筛选方式

筛选方式含义描述
|指明两项之间的一个选择
[]匹配方括号中的任意一个原子
[^]匹配除方括号中原子之外的任意字符
-连接符,,只能在 [ ] 中使用
( )匹配其整体为一个原子,即模式单元。可以理解为由多个单个原子组成的大原子
// 匹配字母
console.log(str.match(/r/));
console.log(str.match(/l/g));
console.log(str.match(/e|r/g));  // | 表示或
console.log(str.match(/2/g));
// 匹配所有的数字
console.log(str.match(/0|1|2|3|4|5|6|7|8|9/g));
console.log(str.match(/2|lo/g));
// [] 的使用
console.log(str.match(/[2|7|27]/g));
console.log(str.match(/[0123456789]/g));
// [^] 除。。。以外
console.log(str.match(/[^1234567890]/g));
console.log(str.match(/[^abcdefghij]/g));
// - 连接符,表示一个范围,前后都包含
console.log(str.match(/[^0-9]/g));
console.log(str.match(/[5-9]/g)); // 匹配数字 5-9
console.log(str.match(/[a-zA-Z0-9]/g));
console.log(str.match(/[a-zA-Z0-9_]/g)); // 匹配数字字母下划线
console.log(str.match(/[5-p]/g)); // 按照ascii编码进行匹配

 元字符之原子的集合

集合含义描述
.查找单个字符,除了换行和结束符。 [ ^\n\r]
\d匹配0-9的数字,相当于[0-9]
\D匹配除0-9之外的任意字符,相当于[ ^0-9 ]
\s匹配一个空白字符,相当于[\f\n\r\t\v ]
\S匹配一个非空白字符,相当于[ ^\f\n\r\t\v ]
\w匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z _]匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z _]
\W匹配任意一个非数字、大小写字母和下划线字符,相当于[ ^0-9a-zA-Z ]
var str = "he12341llo21 world562 http://789455ww78w.baidu.com3";
// 原子的集合
// 注意:在匹配一些特殊的字符串的时候[ / . ]  需要添加转义字符 \
console.log(str.match(/:/g));
console.log(str.match(/\/|\./g));
console.log(str.match(/\d/g)); // 所有的数字 ok
console.log(str.match(/\D/g)); // 所有的非数字
console.log(str.match(/\s/g)); // 所有空字符
console.log(str.match(/\S/g)); // 所有非空字符 ok
console.log(str.match(/\w/g)); // 数字字母下划线 ok
console.log(str.match(/\W/g)); // 除了数字字母下划线

元字符之原子数量限定

数量限定含义描述
{n}其前面的原子连续出现n次
{n,}其前面的原子至少连续出现n次
{n,m}其前面的原子连续出现n到m次
+匹配任何包含至少一个 n 的字符串。{1,}
*匹配任何包含零个或多个 n 的字符串。{0,}
?匹配任何包含零个或一个 n 的字符串。{0,1}
// 规定设置多少个字母
// {n} 出现n次
console.log(str.match(/\d{3}/g));
// {n,} 出现n到正无穷
console.log(str.match(/\d{2,}/g));
// {n,m} 出现n到m次,都能匹配到
console.log(str.match(/\d{2,5}/g));
// +
console.log(str.match(/\d+/g)); // {1,}
// * 匹配0个或者多个
console.log(str.match(/\d*/g)); // {1,}
// ? 可有可无,有的话只能有1个
console.log(str.match(/\d?/g)); // {1,}

贪婪匹配 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配 非贪婪匹配:就是匹配到结果就好,就少的匹配字符 (.+)默认是贪婪匹配 (.+?)为惰性匹配

var str = 'apcdefc';
console.log(str.match(/^a.+c/)); // 贪婪匹配,从a匹配到最后一个c
console.log(str.match(/^a.+?c/)); // 取消贪婪匹配(惰性匹配)

元字符之边界控制

边界控制含义描述
^写在正则表达式最前面表示必须以什么开始
$写在正则表达式最后表示必须以什么结束
\b匹配单词边界 This is an island
\B匹配非单词边界
// ^ 以。。。开头
var reg = /^[a-zA-Z]{1}\w*$/;
var str ='w345234sdf';
// 需求:必须以字母开头,后面 必须 可以是数字字母_,
console.log( reg.test(str));
// \b \B 匹配单词边界和非单词边界
var str = "This is an island";
console.log(str.search(/\bis/));
console.log(str.search(/is\b/));
console.log(str.search(/\bis\B/));
console.log(str.match(/is/g));

 模式修饰符

量词含义描述
i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。
// i 不区分大小写, g 全局匹配
var str = 'ywr9yh3rhyFRE91h';
console.log(str.match(/[a-zA-Z]/g));
console.log(str.match(/[a-z]/gi));
// m 多行匹配  
var str = 'hello world \nhello jack';
console.log(str.match(/^he/g)); // 只匹配第一个he
console.log(str.match(/^he/gm));// 会自动对换行之后的he进行匹配,会匹配到两个he

 使用RegExp创建正则表达式对象

new RegExp(pattern, attributes); pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。

var reg = RegExp(/\d/,'g'); // 匹配所有的数字,并且是全局匹配
var reg = RegExp('1','g'); // 匹配数字1,并且全局匹配
console.log(str1.match(reg));

使用 RegExp(正则表达式) 对象的方法

bool RegExpObject.test(string) 检索字符串是否匹配。 返回 true 或 false

var reg = /^1([3-8]){1}\d{9}$/;
alert(reg.test(13837160809));

array RegExpObject.exec(string) 检索字符串中指定的值。 返回找到的值,并确定其位置。 注意:当使用exec有g全局匹配的时候,才会自动进行while循环遍历

 var str = "I like to eat apples, and my name is apple";
 var reg = new RegExp("apple","g");
 var result;
 while(result = reg.exec(str)){
    alert(result);
     alert(reg.lastIndex);
 }

支持正则表达式的 String 对象的方法

array stringObject.match(regexp) 检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次

var str="1 plus 2 equal 3";
document.write(str.match(/\d+/g))

string stringObject.replace(regexp,replacement) 替换 在正则中:()包括起来,那么就产生了一个模式单元,模式单元使用 $num

name = "jack, Rose";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

array stringObject.split(separator,howmany) 分割成数组

var str="How1are2 you 3doing 7today?";
alert(str.split(/\s+/));

int stringObject.search(regexp) 检索字符串中第一个与 regexp 相匹配的子串的起始位置。 如果没有找到任何匹配的子串,则返回 -1。

var str="I'm studying web前端!"
document.write(str.search(/web/i))


原文地址:https://blog.csdn.net/aaaaaaaallllll/article/details/142858807

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!