正则表达式总结

var patt=/pattern/modifiers;
  • pattern(模式) 描述了表达式的模式
  • modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配

匹配模式

  1. /匹配字符/
var testStr = "freeCodeCamp";
var testRegex = /Code/;
testRegex.test(testStr);
// 返回true
  1. | 搜索多个模式.
var petString = "James has a pet cat.";
var petRegex = /dog|cat|bird|fish/;  //Change this line
var result = petRegex.test(petString); 

var hello = "   Hello, World!  ";
var wsRegex = /^(\s+)|(\s+$)/g; // Change this line
    //如果没有|符号表示紧挨着/^(\s+)(\s+$)/g表示两个空白字符
var result = hello.replace(wsRegex,""); // Change this line
alert(result);
  1. 点符号(.)将匹配任意字符
var humStr = "I'll hum a song";
var unRegex = /.un/; // Change this line
unRegex.test(humStr); //返回["hum"]
  1. 正方形([ ])括号中来定义一组你希望匹配的字符(单个)
var bigStr = "big";    
var bagStr = "bag";    
var bugStr = "bug";    
var bogStr = "bog";    
var bgRegex = /b[aiu]g/;    
bigStr.match(bgRegex); //返回["big"]    
bagStr.match(bgRegex); //返回["bag"]    
bugStr.match(bgRegex); //返回["bug"]    
bogStr.match(bgRegex); //返回null
  1. 连字符(-)定义要匹配的字符(字母,数字)范围
//匹配字母
var catStr = "cat";    
var batStr = "bat";    
var matStr = "mat";    
var bgRegex = /[a-e]at/;    
catStr.match bgRegex); //返回["cat"]    
batStr.match(bgRegex); //返回["bat"]    
matStr.match(bgRegex); //返回null

//匹配数字
var jennyStr = "Jenny8675309";    
var myRegex = /[a-z0-9]/ig;    
//匹配jennyStr中的所有字母和数字    
jennyStr.match(myRegex);
  1. ^符号的用法
    • 匹配未指定的单个字符: 在开括号之后,不想要匹配的字符之前放置一个caret插入字符(^)
    //排除数字与元音的字符的正则表达式
    var jennyStr = "w3cschool good 425389019";
    var myRegex = /[^0-9aeiou]/gi;// Change this line
    var result = jennyStr.match(myRegex);
    
    • 匹配字符串开头的模式:在匹配字符前面插入(^)字符
    var firstString = "Ricky is first and can be found.";    
    var firstRegex = /^Ricky/;    
    firstRegex.test(firstString);    
    //返回true    
    var notFirst ="You can't find Ricky now";    
    firstRegex.test(notFirst);    
    //返回false
    
  2. +加号:匹配一次或多次出现的字符
var Mississippi = 'Mississippi';
var myRegex = /s+/gi; // Change this line
var result = Mississippi.match(myRegex);
  1. *星号:匹配零次或更多次出现的字符
let sWord1 = "seed";    
let sWord2 = "saw";    
let kWord = "kite";    
let sRegex = /s.*/; //搜索以s开头的单词    
sRegex.test(sWord1); //返回true    
sRegex.test(sWord2); //返回true    
sRegex.test(kWord); //返回false
  1. ?字符用法
    • 将其更改为lazy懒惰匹配.
      • greedy贪婪匹配找到符合正则表达式模式的字符串的最长可能部分,并将其作为匹配返回
      • lazy懒惰匹配,它找到符合正则表达式模式的字符串的最小可能部分
    //你可以将正则表达式/t[a-z]*i/应用于字符串"titanic"。这个正则表达式基本上是以t开始的模式,以i结尾,并且之间有一些字母。
    
    //正则表达式是默认的是greedy贪婪匹配,所以匹配将返回["titani"]。它可以找到最大的子字符串,以符合该模式。
    
    //但是,你可以使用?字符将其更改为lazy懒惰匹配。“titanic”匹配调整后的/t[a-z]*?i/正则表达式会返回["ti"]。
    //正则表达式/<.*>/以返回HTML标签<h1>而不是文本"<h1>Winter is coming</h1>".
    
    var html = '<h1>Winter is coming</h1>';
    var regular = /<.*?>/;       //*表示多个,*?表示匹配最少个
    var result = html.match(regular);
    
    • 检查全部或无: 检查前一个元素的零或一。你可以认为这个符号是说前一个元素是可选的。
    var british = "colour";    
    var rainbowRegex= /colou?r/;    
    rainbowRegex.test(american); // 返回 true    
    rainbowRegex.test(british); // 返回 true
    
  2. $字符匹配字符串末尾的模式
var toEnding = "This is a never ending story";    
var storyRegex = /story$/;
storyRegex.test(theEnding);
//返回true    
var noEnding = "Sometimes a story will have to end";    
storyRegex.test(noEnding);    
//返回false    

($)访问替换字符串中的捕获组。

"Code Camp".replace(/(\w+)\s(\w+)/, '$2 $1');    
//返回"Camp Code"
  1. \w。此快捷方式等于[A-Za-z0-9_];\W大写表示相反即[^ A-Za-z0-9_]
var longHand = /[A-Za-z0-9_]+/;
var shortHand = /\w+/;
var numbers = "42";
var varNames = "important_var";
longHand.test(numbers); // 返回true
shortHand.test(numbers); // 返回true
longHand.test(varNames); // 返回true
shortHand.test(varNames); // 返回true
  • 类似的
    • \d[0-9]数字\D非数字
    • \s空白字符包括
      • 空格符 (space character)
      • \t制表符 (tab character)
      • \r回车符 (carriage return character)
      • \n换行符 (new line character)
      • \t垂直换行符 (vertical tab character)
      • \f换页符 (form feed character)
  1. 大括号{}: n{a,b}指定匹配字符n的上限数a和下限数b;
  • 类似的
    • n{a}表示只匹配a个n;
    • n{a,}表示至少匹配a个n;
var A4 = "aaaah";
var A2 = "aah";
var multipleA = /a{3,5}h/;
multipleA.test(A4); // 返回 true
multipleA.test(A2); // 返回 false
  1. ()括号符号:表示模式分组
(Matz|Eich) //匹配Matz或Eich
(Matz)? //匹配0或1个Matz
  1. 正向和负向Lookahead
    • positive lookahead将预查确保搜索模式中的元素在那里,但实际上不会匹配它。正向预查是使用(?=…),其中…是不匹配的必需部分。
    • negative lookahead将会预查搜索模式中的元素不存在。负向预查是使用(?!..),其中…是你不想在那里出现的模式。如果不存在负向预查的部分,则返回该模式的其余部分。
    var noquit = "qt";
    var quRegex= /q(?=u)/;
    var qRegex = /q(?!u)/;
    quit.match(quRegex); // 返回 ["q"]
    noquit.match(qRegex); // 返回 ["q"]
    
    • lookaheads的更实际用途是预查一个字符串中的两个或多个模式。以下是一个简单的密码检查器,预查3到6个字符和至少一个数字:
    var password = "abc123";
    var checkPass = /(?=\w{3,6})(?=\D*\d)/;
    checkPass.test(password); // 返回 true
    
  2. 捕获组复用: 反斜杠(\),使用数字。该数字从1开始,并随着你使用的每个附加捕获组而增加。一个例子是\1来匹配第一个组。
var repeatStr = "regex regex";
var repeatRegex = /(\w+)\s\1/;
repeatRegex.test(repeatStr); // 返回 true
repeatStr.match(repeatRegex); // 返回 ["regex regex", "regex"]

修饰符

  1. 忽略大小写的标志:i标志
var myString = "w3cschool";
var fccRegex = /w3cschool/i; // Change this line
var result = fccRegex.test(myString);
  1. 要多次搜索或提取模式,你可以使用g标志。
var twinkleStar = "twinkleStar,TwinkleStar";
var starRegex = /twinkle/gi;// Change this line
var result = twinkleStar.match(starRegex);

有关正则表达式对象的方法

  1. Regex.test(Str)方法返回是否存在匹配项
var testStr = "freeCodeCamp";
var testRegex = /Code/;
testRegex.test(testStr);
// 返回true
  1. Str.match(Regex)方法找到的实际匹配项
var extractStr = "Extract the word 'coding' from this string.";
var codingRegex = /coding/; // Change this line
var result = extractStr.match(codingRegex); // Change this line
  1. .replace()在字符串中搜索和替换文本
var wrongText = "The sky is silver.";
var silverRegex = /silver/;
wrongText.replace(silverRegex, "blue");
// 返回 "The sky is blue."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值