正则表达式是一组字符,这些字符形成可以在字符串中搜索的模式。 正则表达式可用于验证,例如验证信用卡号,用于搜索(即通过复杂的文本匹配)以及将匹配的文本替换为另一个字符串。 它还具有强大的多语言支持-学习一次即可在多种编程语言中使用它。
我见过很少有人对regex有所了解,并完全忽略了它。 我不怪他们。 regex的语法很复杂,并且会像那些命令行语言一样带来许多麻烦,只会更糟。 但是,每个新事物都令人恐惧,一开始似乎是不可能学习的。 因此,我借用Horatius的话说。 开始时,要大胆,要明智 。
关于正则表达式
Regex起源于神经科学和数学 ,仅在1968年由Ken Thompson在QED文本编辑器中用于文本搜索的程序中实现。 现在,它是许多编程语言(例如Perl,Java,Python,Ruby和JavaScript)的一部分。
让我们看一些有关正则表达式如何工作的示例。
我将在示例中使用JavaScript。 现在,要通过初学者水平,您需要学习正则表达式中使用的所有字符,类,量词,修饰符和方法 。 这是Mozilla开发人员网络的正则表达式页面的链接,您可以在其中查看包含所有内容的表。 您还可以参考这篇文章结尾的备忘单,其中包含最常用的字符。
让我们看一个简单的例子并进行解释。 这是一个正则表达式。
这就是上面的正则表达式将在一行中查找的内容,字符“ B”后跟“ a”至“ z”,“ A”至“ Z”以及数字0至9。
这是突出显示的一行中的匹配项的示例:
篮 ,灯泡 B12 维他命, 硫酸钡 ,N 公元前 公司
上面的正则表达式将在以下位置停止搜索 篮 并返回正面回应。 这是因为如果要让正则表达式查看所有可能的匹配项,则必须指定全局修饰符' g
' 。
现在,让我们看看如何在JavaScript中使用此表达式。 test
方法是:如果找到匹配项,则返回true
,否则返回false
。
var input = "your test string", regex = /B[a-zA-Z\d]+/;
if(!regex.test(input))
alert('No match is found');
else
alert('A match is found');
让我们尝试另一种方法: match
返回在数组中找到的匹配项。
var input = "your test string",
regex = /B[a-zA-Z\d]+/g,
/*I've added the global modifier 'g' to the regex to get all the matches*/
ary = input.match(regex);
if(ary===null)
alert('No match is found');
else
alert('matches are: ' + ary.toString());
字符串replace
如何? 让我们现在用正则表达式尝试一下。
var input = "your test string",
regex = /B[a-zA-Z\d]+/g;
alert(input.replace(regex, "#"));
以下是您需要调整的Codepen。 单击“ JavaScript”选项卡以查看JS代码。
练习题
对于练习,您可以在Google“正则表达式练习”中进行搜索并尝试解决它们。 根据难度级别,这是尝试这些练习时的期望。
基本的
对我来说,对于初学者而言,能够验证密码就足够了。 因此,请选择8至16个字符长度的字母数字字母作为密码,并选择允许的特殊字符。
中间
在这里,您应该使用更多实际数据进行练习,并了解更多正则表达式要点,例如前瞻,断言断言和匹配组 ;
- 验证PIN码,十六进制,日期,电子邮件ID,浮点数。
- 替换尾随零,空格,一组匹配词
- 提取URL的不同部分
高级
您可以优化上述练习的解决方案-电子邮件的最佳正则表达式中包含成千上万个字符-因此,只要您感到满意就可以了,这就足够了 。 您也可以尝试:
- 解析HTML或XML(尽管在现实世界中不建议这样做,因为使用正则表达式解析非常规语言(如HTML)永远不会使其变得万无一失。加上XML解析是一项艰巨的任务,更适合于高级用户)
- 更换标签
- 删除注释(IE条件注释除外)
工具类
可视化正则表达式的工具对我来说是最酷的事情之一。 如果您遇到了很长的复杂正则表达式,只需将其复制粘贴到其中一个工具中,就可以清楚地查看流程。 除此之外, 还有许多工具可以用来修饰正则表达式代码。 他们还展示了示例和备忘单以及共享功能。
- Debuggex –它根据您的输入绘制一个正则表达式图,您可以从此处快速共享到StackOverflow。
- RegExr –您可以使用此测试您的正则表达式。 它还提供了参考,备忘单和示例来帮助您。
- Refiddle –目前,除了JavaScript,您还可以在其中使用Ruby和.NET版本的regex。
正则表达式备忘单
代币 | 定义 |
[abc] | 任何单个字符a,b或c |
[^ abc] | a,b或c以外的任何字符 |
[az] | (包括)a到z之间的字符 |
[^ az] | 字符(从a到z除外) |
[AZ] | A至Z之间(包括)之间的字符 |
。 | 任何单个字符 |
\ s | 任何空白字符 |
\ S | 任何非空白字符 |
\ d | 0到9之间的任何数字 |
\ D | 任何非数字 |
\ w | 任何文字字符(字母,数字和下划线) |
\ W | 任何非单词字符 |
(...) | 捕获所有封闭的内容 |
(a | b) | 匹配a或b |
一个? | 字符a不存在或一次出现 |
一个* | 字符a缺失或存在多次 |
a + | 字符a出现一次或多次 |
一个{3} | 连续出现3个字符 |
a {3,} | 连续出现3个或更多字符 |
一个{3,6} | 连续出现3至6个字符 |
^ | 字符串开始 |
$ | 字符串结尾 |
\ b | 单词边界。 如果一个字符是单词的最后一个或第一个单词字符,或者如果一个字符在单词或非单词字符之间 |
\ B | 非单词边界 |
现在阅读:
翻译自: https://www.hongkiat.com/blog/getting-started-with-regex/