本文讲述了javascript正则表达式定义(语法)。分享给大家供大家参考,具体如下:
正则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即var re = /正则规则/;
2种定义方法本质都是调用RegExp()方法
在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样
function reg(){ var re = /\sjavascript/; return re; }
分别在ECMAScript3和ECMAScript5中调用reg()方法多次
在ECMAScript3中,调用的是同一个RegExp对象,在ECMAScript5中,调用的是不同的RegExp对象 因为在EXCMAScript5中每执行一次,就生成一个新的RegExp对象
所以在ECMAScript3中会造成程序的隐患,因为只要在一个地方对这个对象进行修改的话,所有调用到这个对象的地方都会变化。
1.直接量字符
在正则中一般都会直接匹配字符,如
/javascript/
会直接匹配字符javascript
还支持非字母的字符匹配,如:
\o NUL字符(\u0000)
\t 制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\xnn 由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n
\uxxxx 由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t
\cX 控制字符^X,例如,\cJ等价于换行符\n
在正则表达式中,还有一些有特殊含义的标点符号,他们需要'\'来转义
^$.*+?=!:|\/()[]{}
2.字符类
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W 任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符的字符,注意\w和\S不一样
\d 任何ASCII数值,等价于[0-9]
\D 除了ASCII数字之外的任何字符,等价于[^0-9]
[\b] 退格直接量(特例)
3.重复(次数)
? 0或1次
+ 1次或多次
* 任意次
{n} n次
{m,n} 最少m次,最多n次
{n,} n次或n次以上
正则默认是贪婪匹配的
如[a+b+] 如果要匹配aaabb,它不会匹配ab和aab等,只会匹配aaabb
[a+?b+?] 这个会匹配aaab 为什么会产生这个区别呢?
答:+?是让正则非贪婪匹配,那么b这里只会匹配一个b,那为什么a会匹配3个呢?这是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。
4.选项|分组|引用
| 用于分隔可供选择的字符,如[ab|cd],他既可以匹配ab也可以匹配cd,注意:选择项的尝试匹配次序是左→右,因此[a|ab],当a匹配通过了之后,就不匹配ab了,就算ab是更好的匹配
() 1.单独的项当成子表达式 /java(script)?/ 可以匹配javascript和java 即圆括号部分形成子的表达式,可以对子表达式执行| * ?等操作
2.完整的模式中定义子模式 后面的可以引用前面圆括号起来的表达式 /(['"])[a-z]\1/ \1引用的是第一个圆括号里的表达式,因此引用了['"]
3.后部引用前面的子表达式 注意: /['"][a-z]['"]/这个正则的意思是 单引号或双引号加上一个小写字母加上一个单引号或者双引号,前后的单双引号不是匹配的如果你要匹配可以这么写[(['"])[a-z]\1]
\加数字 可以引用前面圆括号中的表达式
5.制定匹配位置(锚点)
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!p) 零宽负向先行断言,要求接下来的字符不与p匹配
6.修饰符
写在正则表达式字面量//右侧的
i 执行不区分大小写的匹配
g 执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束 /java$/m 可以匹配 java\nfunc
注意:当正则表达式是全局的时候,每次exec() 和 test()的时候都会把当前设置的lastIndex设为当前的位置,再次执行的时候就会从lastIndex的位置开始执行,因此最好每次执行的时候lastIndex设置为0
希望本文所述对大家JavaScript程序设计有所帮助。
主要内容:正则表达式元字符,贪婪模式非贪婪模式,正则表达式转义正则表达式(regular expression)是一种字符串匹配模式或者规则,它可以用来检索、替换那些符合特定规则的文本。正则表达式几乎适用于所有编程语言,无论是前端语言 JavaScript,还是诸如许多后端语言,比如 Python、Java、C# 等,这些语言都提供了相应的函数、模块来支持正则表达式,比如 Python 的 re 模块就提供了正则表达式的常用方法。 在使用 Python 编写
正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理,可以快速、准确地完成复杂的字符串查找、替换等处理要求。 常用的正则表达式元字符: 元字符|功能说明 :-:|- .|除换行符外的任意单个字符 *|0个或任意多个字符 +|1个或任意多个字符 -|用在 [ ] 中表示范围 ||两者中一个 ^|行首 $|行尾 ?|0个或1个字符 \
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为
昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?
本文向大家介绍老生常谈JavaScript 正则表达式语法,包括了老生常谈JavaScript 正则表达式语法的使用技巧和注意事项,需要的朋友参考一下 JavaScript定义正则表达式有两种方法。 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); 它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。 2.字面量 var pa
问题内容: 我知道regEx在各种语言中都很常见…但是我在编写Java语法时遇到了麻烦。我有一个用JS编码的正则表达式; 如何用Java编写相同的代码? 我已经进口了 只是要补充一点,根据我的尝试,它说\ x是无效的转义字符。 问题答案: 将开头和结尾字符更改为,然后将其替换为。 与JavaScript,Perl和其他脚本语言不同,Java对正则表达式没有特殊的语法。相反,它们(通常)使用Java