正则表达式

发布时间:2022-06-28 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了正则表达式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

正则表达式

1.什么是正则表达式?

  1. 正则表达式是一种可以含有通配符的字符串表达式,它描述了一种字符串匹配的模式; 2.正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。
  2. 正则表达式通常被用来检索或替换那些符合某个模式的文本内容。

2.正则表达式的规则

正则表达式的内容放在两个反斜杠之间,正则表达式由普通字符和元字符组成 普通字符:又称字面量:字母、数字、中文字符等;(目前都用字母、数字) 元字符:在模式的上下文中具有特殊的意义:/ | ( ){}[] ^ $ * + ? .

1. 元字符 . (小数点) 可以匹配任何单个字符,除了换行符(n)

比如:模式:/snow./ 匹配的字符串:“snowy”、“snown”等; 对于模式/3.4/与/3.4/的区别: 模式/3.4/ 中的小数点 可以匹配任何单个字符,/3.4/ 中的小数点 就单纯是普通的小数点,就代表3.14

2. 元字符[] (中括号) 称为字符类,一个由普通字符组成的集合,一个字符类和它包含的任何单个字符都匹配;

格式:把需要的字符放到方括号中;

  1. 模式/[abc]/可以匹配a、b、c;又如: 模式/[a-z]/可以匹配a到z之间任意一个小写字母;
  2. 若字符类中第一个字符是“^”,含义为反转指定的字符集; 模式/[^exam]/可以匹配除了e、x、a、m之外的所有字符;

JS中预定义的字符类:(可以通过名称来引用)

名称:d     等价模式:[0-9]     匹配的内容:一个数字
名称:D     等价模式:[^0-9]    匹配的内容:一个非数字
名称:w     等价模式:[A-Za-z0-9_]     匹配的内容:一个单字字符
名称:W     等价模式:[^A-Za-z0-9_]    匹配的内容:一个非单字字符
名称:s     等价模式:[rtnf]       匹配的内容:一个空白字符
名称:S     等价模式:[^rtnf]      匹配的内容:一个非空白字符

3. 元字符{} (花括号) 实现模式中某一部分的重复:

方法:在花括号中附加一个数字限定符;

  1. {n}:一个字符的n次重复;
  2. {m,n}:一个字符的m到n次重复;最少匹配 n 次且最多匹配 m 次。
  3. {m,}:一个字符不小于m次的重复;

模式/xy{3}z/匹配"xyyyz" ; /u{2,4}/匹配"uu" "uuu" "uuuu" ; /u{2,}/匹配"uu"、"uuu"等;

4. 元字符*+?(又称作符号限定符) 实现模式中某一部分的重复:

*:零次或多次重复;

匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

+:一次或多次重复;

匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

?:零次或一次重复;

匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。 ? 等价于 {0,1}。

runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。

runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。

runoo*b 中的 ,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 ,runo*ob 匹配字符串 runoob。

5.元字符 ^$ b B

  1. :符号放到模式之前,就可指定该模式只匹配字符串的开头; /^Script/匹配“Scripting”
  2. $:符号$放到模式之后,就可指定该模式只匹配字符串的末尾; /gold$/匹配“I like gold”;
  3. b:匹配的是单词的边界; /[1]ava[Ss]criptb/匹配“JavaScript is fun”;
  4. B:匹配不是单词边界的位置;

6. 元字符 i、g、m(又称修饰符) 修饰符可以放到模式(/)之后,用于修改模式的应用方式;

  1. 修饰符i:模式中的字母既可以匹配字符串中的小写字母又可以匹配大写字母; /Watermelon/i: watermelon、WaterMelon等;
  2. 修饰符g:全局匹配,即应当找出被检索字符串的所有匹配;
  3. 修饰符m:多模式匹配,针对多行字符串,匹配每行中的内容

3.正则表达式在JS中的应用

主要用于文本的模式匹配,包括文本的查找、替换和格式化; JS中模式匹配有两种方式: 一种是基于RegExp类; 一种是基于String类;

1. String类的方法

search(正则表达式):以正则表达式作为参数,返回第一个与之匹配的子串开始的位置,若没有与之匹配的子串,返回-1;

 <script>
var str="Hi,High,History.";
console.log(str.search(/Hi/)) ;//0

var str="ii,High,History.";
console.log(str.search(/Hi/)) ;//3
 </script>

replace(正则表达式,替换字符串):替换String对象中与给定模式匹配的某个子字符串,返回值为替换后的新串;

<script>
 var str="snow snows snowy snowing snowed";
console.log(str.replace(/snow/,"rain"));//rain snows snowy snowing snowed
 
//若模式后有g,则String对象中每个匹配的子字符串都将被替换;
var str="snow snows snowy snowing snowed";
console.log(str.replace(/snow/g,"rain"));
//rain rains rainy raining rained
</script>

match(正则表达式):返回值为一个数组;

<script>
/*若正则表达式中不带有g,
数组的第一个元素为字符串中第一个与模式匹配的子字符串,
数组剩余的元素为与模式括号中的部分匹配的元素;
*/
var str="snow snows snowy snowing snowed sow  aa  bb";
console.log(str.match(/snow/));
//["snow", index: 0, input: "snow snows snowy snowing snowed sow  aa  bb", groups: undefined]

// 2. 若正则表达式中带有g,数组为字符串中所有与模式匹配的子字符串;
var str="snow snows snowy snowing snowed sow  aa  bb";
console.log(str.match(/snow/g));
//显示:(5) ["snow", "snow", "snow", "snow", "snow"]
</script>

2.RegExp类的方法

JS中正则表达式不是字符串类型,而是预定义类型RegExp **步骤:

  1. 创建RegExp对象:(以下三种方式) var re=new RegExp(/…/gi); var re=/…/gi;(用的最多) var re=new RegExp(“…”,“gi”);
  2. 调用RegExp的test(”字符串”),返回值布尔值;**

1. 举例1

要求: 通过表单输入你的家庭电话,点击验证按钮测试一下格式是否正确; 如果正确弹出警告框: It is a legal phone number! 不正确弹出警告框: It is not a legal phone number!

分析:

  1. 当用户单击验证按钮时,执行函数testPhoneNumber();(事件机制)
  2. 事件处理函数testPhoneNumber()的处理逻辑: (1) JS通过DOM获取用户在单行文本框中输入的字符串str(input元素的value属性); (2)用正则表达式reg定义家庭电话; (3)调用test()验证str和reg是否匹配,然后输出不同的提示信息。
<body>
 请输入你的家庭电话:<input type="text" name="number" id="number"/><br/>
 <input type="button" value="验证" onclick="testPhoneNumber()"/>
 <script>
function testPhoneNumber(){
var phone=document.getElementById("number").value; 
var ok=/^d{3,4}-d{7,8}$/.test(phone);
if(ok)
{alert("It is a legal phone number!");}
else{ alert("It is not a legal phone number!");
     }
} 

</script>
</body>

  1. Jj ↩︎

脚本宝典总结

以上是脚本宝典为你收集整理的正则表达式全部内容,希望文章能够帮你解决正则表达式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: