欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS常用正则表达式备忘录

程序员文章站 2022-03-26 14:34:42
摘要: 玩转正则表达式。 原文: "JS常用正则表达式备忘录" 作者: "前端小智" "Fundebug" 经授权转载,版权归原作者所有。 正则表达式或“regex”用于匹配字符串的各个部分 下面是我创建正则表达式的备忘单。 匹配正则 使用 方法 匹配多个模式 使用操作符号 忽略大小写 使用 标志表 ......

摘要: 玩转正则表达式。

fundebug经授权转载,版权归原作者所有。

正则表达式或“regex”用于匹配字符串的各个部分 下面是我创建正则表达式的备忘单。

匹配正则

使用 .test() 方法

let teststring = "my test string";
let testregex = /string/;
testregex.test(teststring);

匹配多个模式

使用操作符号 |

const regex = /yes|no|maybe/;    

忽略大小写

使用i标志表示忽略大小写

const caseinsensitiveregex = /ignore case/i;
const teststring = 'we use the i flag to ignore case';
caseinsensitiveregex.test(teststring); // true

提取变量的第一个匹配项

使用 .match() 方法

const match = "hello world!".match(/hello/i); // "hello"

提取数组中的所有匹配项

使用 g 标志

const teststring = "repeat repeat repeat";
const regexwithallmatches = /repeat/gi;
teststring.match(regexwithallmatches); // ["repeat", "repeat", "repeat"]   

匹配任意字符

使用通配符. 作为任何字符的占位符

// to match "cat", "bat", "fat", "mat"
const regexwithwildcard = /.at/gi;
const teststring = "cat bat cupcake fat mat dog";
const allmatchingwords = teststring.match(regexwithwildcard); // ["cat", "bat", "fat", "mat"]    

用多种可能性匹配单个字符

  • 使用字符类,你可以使用它来定义要匹配的一组字符
  • 把它们放在方括号里 []
//匹配 "cat" "fat" and "mat" 但不匹配 "bat"
const regexwithcharclass = /[cfm]at/g;
const teststring = "cat fat bat mat";
const allmatchingwords = teststring.match(regexwithcharclass); // ["cat", "fat", "mat"]    

匹配字母表中的字母

使用字符集内的范围 [a-z]

const regexwidthcharrange = /[a-e]at/;

const regexwithcharrange = /[a-e]at/;
const catstring = "cat";
const batstring = "bat";
const fatstring = "fat";

regexwithcharrange.test(catstring); // true
regexwithcharrange.test(batstring); // true
regexwithcharrange.test(fatstring); // false

匹配特定的数字和字母

你还可以使用连字符来匹配数字

const regexwithletterandnumberrange = /[a-z0-9]/ig;
const teststring = "emma19382";
teststring.match(regexwithletterandnumberrange) // true

匹配单个未知字符

要匹配您不想拥有的一组字符,使用否定字符集 ^

const allcharsnotvowels = /[^aeiou]/gi;
const allcharsnotvowelsornumbers = /[^aeiou0-9]/gi;

匹配一行中出现一次或多次的字符

使用 + 标志

const oneormoreasregex = /a+/gi;
const oneormoressregex = /s+/gi;
const cityinflorida = "tallahassee";

cityinflorida.match(oneormoreasregex); // ['a', 'a', 'a'];
cityinflorida.match(oneormoressregex); // ['ss'];   

匹配连续出现零次或多次的字符

使用星号 *

const zeroormoreosregex = /hi*/gi;
const normalhi = "hi";
const happyhi = "hiiiiii";
const twohis = "hiihii";
const bye = "bye";

normalhi.match(zeroormoreosregex); // ["hi"]
happyhi.match(zeroormoreosregex); // ["hiiiiii"]
twohis.match(zeroormoreosregex); // ["hii", "hii"]
bye.match(zeroormoreosregex); // null

惰性匹配

  • 字符串中与给定要求匹配的最小部分
  • 默认情况下,正则表达式是贪婪的(匹配满足给定要求的字符串的最长部分)
  • 使用 ? 阻止贪婪模式(惰性匹配 )
const teststring = "catastrophe";
const greedyrexex = /c[a-z]*t/gi;
const lazyregex = /c[a-z]*?t/gi;
    
teststring.match(greedyrexex); // ["catast"]
teststring.match(lazyregex); // ["cat"]   

匹配起始字符串模式

要测试字符串开头的字符匹配,请使用插入符号^,但要放大开头,不要放到字符集中

const emmaatfrontofstring = "emma likes cats a lot.";
const emmanotatfrontofstring = "the cats emma likes are fluffy.";
const startingstringregex = /^emma/;

startingstringregex.test(emmaatfrontofstring); // true
startingstringregex.test(emmanotatfrontofstring); // false    

代码部署后可能存在的bug没法实时知道,事后为了解决这些bug,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的bug监控工具 fundebug

匹配结束字符串模式

使用 $ 来判断字符串是否是以规定的字符结尾

const emmaatbackofstring = "the cats do not like emma";
const emmanotatbackofstring = "emma loves the cats";
const startingstringregex = /emma$/;

startingstringregex.test(emmaatbackofstring); // true
startingstringregex.test(emmanotatbackofstring); // false    

匹配所有字母和数字

使用\word 简写

const longhand = /[a-za-z0-9_]+/;
const shorthand = /\w+/;
const numbers = "42";
const myfavoritecolor = "magenta";

longhand.test(numbers); // true
shorthand.test(numbers); // true
longhand.test(myfavoritecolor); // true
shorthand.test(myfavoritecolor); // true

除了字母和数字,其他的都要匹配

\w 表示 \w 的反义

const noalphanumericcharregex = /\w/gi;
const weirdcharacters = "!_$!!";
const alphanumericcharacters = "ab283ad";

noalphanumericcharregex.test(weirdcharacters); // true
noalphanumericcharregex.test(alphanumericcharacters); // false

匹配所有数字

你可以使用字符集[0-9],或者使用简写 \d

const digitsregex = /\d/g;
const stringwithdigits = "my cat eats $20.00 worth of food a week.";

stringwithdigits.match(digitsregex); // ["2", "0", "0", "0"]

匹配所有非数字

\d 表示 \d 的反义

const nondigitsregex = /\d/g;
const stringwithletters = "101 degrees";

stringwithletters.match(nondigitsregex); // [" ", "d", "e", "g", "r", "e", "e", "s"]

匹配空格

使用 \s 来匹配空格和回车符

const sentencewithwhitespace = "i like cats!"
var spaceregex = /\s/g;
whitespace.match(sentencewithwhitespace); // [" ", " "]

匹配非空格

\s 表示 \s 的反义

const sentencewithwhitespace = "c a t"
const nonwhitespaceregex = /\s/g;
sentencewithwhitespace.match(nonwhitespaceregex); // ["c", "a", "t"]

匹配的字符数

你可以使用 {下界,上界} 指定一行中的特定字符数

const regularhi = "hi";
const mediocrehi = "hiii";
const superexcitedhey = "heeeeyyyyy!!!";
const excitedregex = /hi{1,4}/;

excitedregex.test(regularhi); // true
excitedregex.test(mediocrehi); // true
excitedregex.test(superexcitedhey); //false

匹配最低个数的字符数

使用{下界, }定义最少数量的字符要求,下面示例表示字母 i 至少要出现2次

const regularhi = "hi";
const mediocrehi = "hiii";
const superexcitedhey = "heeeeyyyyy!!!";
const excitedregex = /hi{2,}/;

excitedregex.test(regularhi); // false
excitedregex.test(mediocrehi); // true
excitedregex.test(superexcitedhey); //false

匹配精确的字符数

使用{requiredcount}指定字符要求的确切数量

const regularhi = "hi";
const besthi = "hii";
const mediocrehi = "hiii";
const excitedregex = /hi{2}/;

excitedregex.test(regularhi); // false
excitedregex.test(besthi); // true
excitedregex.test(mediocrehi); //false  

匹配0次或1次

使用 ? 匹配字符 0 次或1次

const britishspelling = "colour";
const americanspelling = "color";
const languageregex = /colou?r/i;

languageregex.test(britishspelling); // true
languageregex.test(americanspelling); // true

关于fundebug

fundebug专注于javascript、微信小程序、微信小游戏、支付宝小程序、react native、node.js和java线上应用实时bug监控。 自从2016年双十一正式上线,fundebug累计处理了10亿+错误事件,付费客户有google、360、金山软件、百姓网等众多品牌企业。欢迎大家!

JS常用正则表达式备忘录