TRY REGEX:正则表达式交互式入门教程 翻译&解答

TRY REGEX 是一个交互式的正则表达式进修项目
项目地点:https://github.com/callumacra…
在线地点:http://tryregex.com/
翻译版在线:http://www.rakuhi.com/tryrege…
很合适正则表达式初学者进修、演习
统共28个小课程,从零基本入门到能完成大多数正则表达式誊写。

个人做了 翻译&解答,有题目的地方迎接斧正

翻译

第一课 正则表达式入门

本交互课程意在引见正则表达式,更明白的说是JavaScript下的正则表达式。课程固然也会教您用其他言语写正则表达式,然则您应当晓得它们是有辨别的。
左边的掌握台就是一个JavaScript掌握台。请运用 setName('Your name') (Your name替代为您的名字)敕令设置您的姓名来最先课程。
另有一些有用的敕令:实行 help() 来检察它们

第二课 什么是正则表达式?

正则表达式(也写作 regex 或 regexp)是一个用来形貌搜刮形式的字符串——相似星号(*)文件名婚配通配符,但越发有用(固然也越发庞杂)。
我们将会从一个异常基本的例子最先,来让您掌握 JavaScript 中语法和正则表达式的运用。
bio是一个不晓得是不是包括您名字的变量。为了看看结果,请输入 bio.match(/{{ firstEscaped }}/);

第三课 包括!

从上个例子中您可以得知一些事变。第一,用于定义正则表达式的语法:运用两个斜杠包括表达式:
/表达式/
假如您将它输入掌握台,将会返回正则表达式。
第二,您可以对字符串运用 .match() 要领来测试正则表达式。另有一些其他要领可以挪用:您可以直接对正则表达式运用 .exec() 要领来对实行一个字符串。请输入 /{{ firstEscaped }}/.exec(bio)

第四课 简朴测试

.exec() 要领和 .match() 要领做的是一样的事变,但它是对表达式挪用而不是对字符串——这会很有用。
另一个可用的是 .test() 要领 ——多是这些要领中最简朴的 。相似于 .exec() ,但返回的是布尔值。试一试吧!
提醒:左边掌握台可以运用向上键来猎取之前输入的表达式。

第五课 字符串替代

我们会用到的末了一个要领是 .replace() ,用一个字符串替代另一个字符串的要领。输入一下内容来将 bio 变量中您的名字隐蔽:
bio.replace(/{{ firstEscaped }}/, '[redacted]')

第六课 迥殊字符

我们迄今为止用过的表达式都不是迥殊风趣,也没有包括迥殊字符。以下这些字符在正则表达式中应当被转义:

$()*+.?[^|]

为了躲避它们,运用反斜杠转义,比方 /what?/
写一个正则表达式来测试 num 变量中是不是包括字符串“3.5”。

第七课 点运算符

是不包括的!num 的值是 123456,它不包括字符串“3.5”。
在正则表达式中点运算符有迥殊的寄义:它将婚配除了换行符之外的一切的单个字符(所以 /a.c/ 将会婚配 “abc”, “a c”, “a$c” 等等)。未转义点运算符直接运用 /3.5/ 将可以婚配到 num 中字符串,这里点运算符将会婚配 4。
尝尝吧。

第八课 量词

有一些“量词”可以用来表达某个东西须要被婚配多少次。第一个量词是问号,作用是让前置项(一个字符或字符组)可选(即涌现0次或1次)。
表达式 /regexp?/ 将会婚配 “regex” 和 “regexp”,问号让 p(只是p)可选。
写一个表达式同时能婚配”frontend” 和 “front-end”,答案经由过程 answer() 函数传参(例子:answer(/表达式/))。

第九课 加号

我们要进修的下一个量词是加号。它的意义是“一个或更多前置项”;/Princes+/ 会婚配 “Princes”, “Princess”, “Princesssss” 等等。但不会婚配”Prince”。
您要写的下一个表达式将会有点庞杂。写一个正则表达式,抽掏出 shortStory 变量(可输入 shortStory 检察变量内容)中摆布括号间的一切内容(包括括号)。提醒:须要用到适才说过的点运算符。

第十课 星号

星号和加号相似;然则差别于“一个或更多”,星号的寄义是“零个或更多的前置项”。/Princes*//Princes+/ 婚配内容的基本上还能婚配 “Prince” 。
反复上一个例子,用星号替代加号。抽掏出 shortStory 变量中摆布括号间的一切内容,即使括号内没有内容。

第十一课 限定反复次数

有一个量词可以用来限定反复次数。语法是 {min,max} 个中 min 是最小涌现次数,max 是最大涌现次数。比方 /a{3,5}/ 会且只会婚配 “aaa”, “aaaa” 和 “aaaaa”。
写一个表达式婚配 bracketNumbers 中摆布圆括号中心长度为5~8之间的字符。

第十二课 限定反复次数进阶

为了进一步明白反复次数局限,您可以用{n}指明白定的一个反复次数,个中 n 是反复次数。比方表达式 a{6} 只会婚配反复的六个 a。
在运用大括号时,您可以不指定最大反复个数,只留下最小反复个数。比方,/a{5,}/ 会婚配5个或更屡次反复的字母 a。
answer() 函数给出不运用 ?*+ 字符,但和 /a?b+c*/ 等价的正则表达式。

第十三课 标志——不辨别大小写标志

标志用来转变正则表达式的表达形式,位于表达式的背面(例子:/表达式/ig)。每一个标志用一个字母示意,JavaScript 支撑四种标志——有两种将会在本课程中学到。i 标志让表达式不辨别大小写——在没有这个标志时 /a/ 只会婚配“a”,不会婚配“A”;/a/i 则会同时婚配“a”和“A”。
实行 /CAT/i.exec('Category') 来看看 i 标志的作用。

第十四课 标志——全局婚配标志

第二个经常使用的标志是全局婚配标志,用字母 g 示意。 /a/ 只会婚配字符串中第一个 a, /a/g 则会婚配每一个单个的字母 a。
写一个正则表达式,来用字母 “e” 替代 shortStory 里一切的字母 “a”。
您可以运用字符串的 .replace(expr, replace) 要领来做替代。

第十五课 字符组

字符组许可您指定一组或一个局限的字符去婚配。/[aeiou]/ 婚配恣意元音字母,/[a-m]/ 婚配恣意字母表前半部份的字母,/[aeiou0-9]/ 婚配恣意元音字母或数字。
注重在字符组中,您不须要转义点字符,它将被直接婚配。假如您要运用连字符(-),则须要转义。
我们定义正当的用户名包括5到12个字母(大写字母或小写字母)或连字符。写一段代码,在 username 正当时返回 true

第十六课 否认字符组

否认字符组将会婚配不在字符组内的字符。您可以在字符组前增加一个脱字号(^)来否认它。比方 /[^a-m]/ 将婚配“z” 、“$”,然则不会婚配“c”。
弄清楚 “非 [a-m]” 和 “不在 [a-m] 局限” 的辨别很主要,/c[^a]t/ 将婚配 “cut”,但不会婚配 “cat” 和 “ct” ——这个异常主要。
如今正当的用户名可以包括任何非空格字符(但一样长度在 5 到 12 之间)。写出一个正则表达式来磨练 username 正当性。

第十七课 范例字符

范例字符可以用作罕见字符组的简单表达。有6种范例字符:d 婚配十进制数字(0-9),s 婚配空格, w 婚配单词字符(单词字 —— Unicode字符集、数字、下划线)。
别的三个可用的范例字符是将上面三个改成大写字母,就起到了否认它们的结果;比方 S 婚配一切非空格字符。
写一个正则表达式,能婚配一个后缀一个空格一串数字的单词。用 charTypeTest 测试:不要运用任何笔墨字符。

第十八课 定位符

假如您想确保字符串以某种一定字(字符集)的最先或完毕——比方,您愿望包装字符串以大写字母最先——那末你就可以运用锚点。美圆标记($)婚配字符串末端,脱字符(^)婚配字符串最先。/^cat$/ 将只会婚配到 “cat” 而不婚配其他任何字符串(/cat/ 会婚配任何包括 “cat” 的字符串)。
写一个正则表达式来测试 possibleUrl 变量是不是以 “http://” 或 “https://” 最先,且从头至尾不包括任何空格。
提醒:须要用到问号、否认字符集。您可以会须要两种锚点。

第十九课 捕捉组

您可以运用圆括号来建立组,可以将多项组合起来或许保留结果以供以后援用:
/"(.+)"/
上面就是一个捕捉组的示例,意义是圆括号内婚配到的字符串将被保留在 .match().exec() 返回的数组中。
转头看看之前我们用表达式 /(.{5,8})/.exec(shorterStory) 抓取两个圆括号之间的数据的例子。尝试用圆括号包住 .{5,8} 从新运转一下。

第二十课 非捕捉组

您可以看到如今返回数组有个两项:第一项是悉数婚配内容,第二项只包括捕捉组婚配数据。
另有一种组范例叫做非捕捉组。这类组语法上稍有差别,它不在数组内存储直。假如不须要援用组,您可以偏向运用非捕捉组:它会坚持返回数组的纯洁。上一个例子中,增加 ?: 在组的最先点运算符之前,将表达式变成非捕捉组。

第二十一课 量词

和我们zhi’q没有用组险些一样。
非捕捉组的主要用途是给一个组给予量词。下面的表达式将会婚配 “I ate” 和 Carrot and I ate” 不会婚配其他内容:
/^(?:{{ firstEscaped }} and )?I ate$/
写一个表达式,可以婚配 “ha” 涌现两次或更多的字符串 (比方:“haha” 或 “hahahahaha”),用 answer() 函数给出答案。
提醒:您的表达式不应当婚配 “hahah”。运用锚点来保证这一点。

第二十二课 管道标记

您可以运用管道标记(|)来指定“或”关联。下面的表达式将婚配 “The dog ate” 和 “The cat ate”:
/The (dog|cat) ate/
您也可以运用非捕捉组,然则在这个例子中我们愿望猎取结果。您可以在一个组内用恣意多个管道标记。让上面的表达式在坚持原有婚配的基本上也可以婚配 “The rabbit ate” (带婚配串在 rabbit 变量中)。

第二十三课 反向援用

在统一个表达式中,您可以援用之前捕捉到的值。只需简朴的写成反斜杠后随着捕捉组数字(它在返回字符串里的索引值)。比方,下面的表达式将婚配 “The cat ate with the other cat” 和 “The dog ate with the other dog”,但不会婚配 “The cat ate with the other dog”(固然,这自身就挺新鲜的):
/The (dog|cat) ate with the other 1/
写一个表达式,可以婚配统一行内两个雷同的单词(比方:“hello hello world”):和之前的例子一样,用 answer() 函数给出答案。

第二十四课 RegExp对象

除了笔墨运算符(斜杠),JavaScript 还供应 RegExp 组织器,许可您运用字符串去指定须要的表达式。这个关于将变量放在表达式中异常有用。它的运用要领以下:

// Same as /regexp?/ig
new RegExp('regexp?', 'ig');

用户名一样包括在变量中。 userData 变量包括用户信息:把它打印在掌握台中来检察数据格式。运用 username 变量去抽取该用户的关联词。为了可以准确考证,请把答案写在统一行。

第二十五课 高等替代

我们已晓得了两种捕捉组运用捕捉值得要领:第一种是返回数组,第二种是反向援用。您也可以在 .replace() 要领的第二个参数中猎取它:

var text = '*italic text*';
var replace = '<em>$1</em>';
text.replace(/\*([^*]+)\*/, replace);

写一个相似上面的代码,将 boldText 变量替代成 <strong> 元素。

第二十六课 懒散 vs 贪欲 婚配

JavaScript 默许的婚配形式是 “贪欲”,也就是说婚配尽量多个:
'"Hi", "Hello"'.match(/".+"/)
上面的表达式将会返回 "Hi", "Hello" ,它婚配了两个双引号间内容。懒散婚配则和贪欲婚配相反,它会婚配尽量少的——所以这个例子中,只会婚配 "Hi"
经由过程在量词背面加上问号来完成懒散婚配——用上面的例子尝尝吧。

第二十七课 断言

断言是一个应当被婚配但不会被存储的形式:不是 “婚配a然后婚配b” ,而是 “婚配背面连着b的a,然则不婚配b”。在 JavaScript 中有两种断言范例,一定先行断言 和 否认先行断言。“先行” 就是说向前查找;JavaScript 不支撑 “后行”(向后查找)。
一定先行断言示意我们想向前查找a的婚配。为了查找a b衔接,我们可以运用 /a(?=b)/
运用断言来从 partialSums 中掏出 “6+3”。不要运用任何数字标记,用 d

第二十八课 否认断言

断言也可以是不是定的,所以我们可以婚配不衔接在某项后的字符串。注重和字符组差别的是,它可以婚配到一些不一样的——假如你说 “背面不连着b的a”,a可以在字符串的末端。
否认断言的语法和一定断言的语法相似,但用感叹号(!)替代等号:比方,/a(?!b)/ 会婚配背面不是字母 b 的字母 a。
用一个一定断言接一个否认断言来提取 partialSums 中的 “3+3”。

您完成了课程!

祝贺您,完成了 Try Regex 的课程。您基本上掌握了 JavaScript 中正则表达式的大部份内容,如今您可以写出适用于大多数场景的正则表达式了。
下面这些是延长浏览内容(不可用链接已替代):

解答

正则表达式的风趣的地方就在于,关于统一个题目于有多种差别的写法。下面给出的解答有些只是准确写法中一种,仅供参考。本身思索本身尝试才真正掌握正则表达式。

第一课 正则表达式入门

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二课 什么是正则表达式?

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第三课 包括!

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第四课 简朴测试

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第五课 字符串替代

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第六课 迥殊字符

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第七课 点运算符

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第八课 量词

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第九课 加号

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十课 星号

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十一课 限定反复次数

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十二课 限定反复次数进阶

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十三课 标志——不辨别大小写标志

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十四课 标志——全局婚配标志

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十五课 字符组

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十六课 否认字符组

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十七课 范例字符

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十八课 定位符

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第十九课 捕捉组

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十课 非捕捉组

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十一课 量词

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十二课 管道标记

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十三课 反向援用

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十四课 RegExp对象

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十五课 高等替代

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十六课 懒散 vs 贪欲 婚配

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十七课 断言

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

第二十八课 否认断言

《TRY REGEX:正则表达式交互式入门教程 翻译&解答》

    原文作者:萝卜粥
    原文地址: https://segmentfault.com/a/1190000008361133
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞