var patt=/pattern/modifiers;
- pattern(模式) 描述了表达式的模式
- modifiers(修饰符) 用于指定全局匹配、区分大小写的匹配和多行匹配
匹配模式
- /匹配字符/
var testStr = "freeCodeCamp";
var testRegex = /Code/;
testRegex.test(testStr);
// 返回true
- | 搜索多个模式.
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);
- 点符号(.)将匹配任意字符
var humStr = "I'll hum a song";
var unRegex = /.un/; // Change this line
unRegex.test(humStr); //返回["hum"]
- 正方形([ ])括号中来定义一组你希望匹配的字符(单个)
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
- 连字符(-)定义要匹配的字符(字母,数字)范围
//匹配字母
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);
- ^符号的用法
- 匹配未指定的单个字符: 在开括号之后,不想要匹配的字符之前放置一个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
- +加号:匹配一次或多次出现的字符
var Mississippi = 'Mississippi';
var myRegex = /s+/gi; // Change this line
var result = Mississippi.match(myRegex);
- *星号:匹配零次或更多次出现的字符
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
- ?字符用法
- 将其更改为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
- 将其更改为lazy懒惰匹配.
- $字符匹配字符串末尾的模式
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"
- \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)
- 大括号{}: 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
- ()括号符号:表示模式分组
(Matz|Eich) //匹配Matz或Eich
(Matz)? //匹配0或1个Matz
- 正向和负向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
- 捕获组复用: 反斜杠(\),使用数字。该数字从1开始,并随着你使用的每个附加捕获组而增加。一个例子是\1来匹配第一个组。
var repeatStr = "regex regex";
var repeatRegex = /(\w+)\s\1/;
repeatRegex.test(repeatStr); // 返回 true
repeatStr.match(repeatRegex); // 返回 ["regex regex", "regex"]
修饰符
- 忽略大小写的标志:i标志
var myString = "w3cschool";
var fccRegex = /w3cschool/i; // Change this line
var result = fccRegex.test(myString);
- 要多次搜索或提取模式,你可以使用g标志。
var twinkleStar = "twinkleStar,TwinkleStar";
var starRegex = /twinkle/gi;// Change this line
var result = twinkleStar.match(starRegex);
有关正则表达式对象的方法
- Regex.test(Str)方法返回是否存在匹配项
var testStr = "freeCodeCamp";
var testRegex = /Code/;
testRegex.test(testStr);
// 返回true
- 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
- .replace()在字符串中搜索和替换文本
var wrongText = "The sky is silver.";
var silverRegex = /silver/;
wrongText.replace(silverRegex, "blue");
// 返回 "The sky is blue."