b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

JS正则表达式百科全书(非常详细)

电脑杂谈  发布时间:2020-03-28 00:03:42  来源:网络整理

js正则表达式常用代码_js定义正则表达式_js使用正则表达式

前面的部分介绍了如何在JavaScript中使用正则表达式以及如何执行匹配. 本节描述正则表达式的特定语法.

正则表达式是一种通用工具,几乎可以在所有编程语言中使用,例如JavaScript,PHP,Java,Python,C ++;但是,不同的编程语言对正则表达式语法的支持有所不同,有些编程语言支持所有语法js定义正则表达式,有些仅支持一个子集. 本节中描述的正则表达式语法适用于JavaScript.

正则表达式的语法为字符模式. 字符模式是一组特殊格式的字符串. 它由一系列特殊字符和普通字符组成,每个特殊字符和普通字符都包含某些语义和功能. 描述字符根据正则表达式语法规则,大多数字符只能描述自己. 这些字符称为普通字符,例如所有字母和数字.

元字符是具有特殊功能的特殊字符. 它们中的大多数都需要标有反斜杠,以将其与普通字符区分开,而一些元字符需要反斜杠,以便可以将其翻译为普通字符. 表格中显示了JavaScript正则表达式支持的元字符.

元字符元字符描述

查找单个字符,但换行符和换行符除外

查找文字字符

查找非单词字符

查找号码

查找非数字字符

查找空格字符

查找非空白字符

匹配单词边界

js正则表达式常用代码_js定义正则表达式_js使用正则表达式

匹配非单词边界

查找NUL字符

查找换行符

查找分页符

查找回车

查找标签

查找垂直标签

\ xxx

查找由八进制数字xxxx指定的字符

\ xdd

查找由十六进制数字dd指定的字符

\ uxxxx

查找以十六进制xxxx指定的Unicode字符

js定义正则表达式_js使用正则表达式_js正则表达式常用代码

有多种表示字符的方法. 除了使用字符本身之外,您还可以使用ASCII编码或Unicode编码来表示它们. 下面的示例1使用ASCII编码来定义正则表达式直接量.

var r = /\x61/;
var s = "JavaScript";
var a = s.match(s);
由于字母a的ASCII码为97,因此将其转换为十六进制值后为61,因此,如果要匹配字符a,您应该添加“ \ x”前缀以表示它是ASCII编码的. 示例2除了十六进制,您还可以直接使用八进制值表示字符.
var r = /\141/;
var s = "JavaScript";
var a = s.match(r);
您需要添加“ \ x”前缀以使用十六进制,主要是为了避免语义上的混淆,而八进制不需要添加前缀. 示例3 ASCII编码只能匹配有限的单字节字符,而Unicode编码可以表示双字节字符. Unicode编码: 前缀“ \ u”,后跟4位十六进制值.
var r = "/\u0061/";
var s = "JavaScript";
var a = s.match(s);

在RegExp()构造函数中使用元字符时,请使用双斜杠.

var r = new RegExp("\\u0061"); 
RegExp()构造函数的参数仅接受字符串,而不接受字符模式. 在字符串中,任何字符加上反斜杠也表示字符本身. 例如,字符串“ \ u”被解释为u本身,因此,对于“ \ u0061”字符串,转换为字符模式时,将其解释为“ u0061”而不是“ \ u0061”,反斜杠将失去转义功能. 解决方法: 在字符u前面加一个双反斜杠. 描述字符范围在正则表达式语法中,括号表示字符范围. 您可以在方括号中包含多个字符,这意味着您可以匹配其中任何一个. 如果多个字符的编码顺序是连续的,则只能指定开始和结束字符,省略中间字符,并且只能使用连字符〜. 如果在方括号中添加插入号^前缀,则还可以表示范围之按字符编码顺序匹配. 如果要匹配的字符恰好在字符编码表中的特定区域中,则可以用这种方式表示.

如果匹配任何ASCII字符:

var r = /[\u0000-\u00ff]/g;
如果它与任何双字节汉字匹配:
var r = /[^\u0000-\u00ff]/g;
如果您匹配任何大小写字母,并且数字:
var r = /[a-zA-Z0-9]/g;
使用Unicode编码设计,匹配数字:
var r = /[\u0030-\u0039]/g;
使用以下字符模式匹配任何大写字母:
var r = /[\u0041-\u004A]/g;
使用以下字符模式来匹配任何小写字母:
var r = /[\u0061-\u007A]/g;
示例2您可以混合使用各种字符模式在字符范围内.
var s = "abcdez";  //字符串直接量
var r = /[abce-z]/g;  //字符a、b、c,以及从e~z之间的任意字符
var a = s.match(r);  //返回数组["a","b","c","e","z"]
示例3括号中不能有空格,否则会被误认为是匹配的空格.
var r = /[0-9]/g;
示例4字符范围可以组合使用以设计更灵活的匹配模式.
var s = "ab abd6 abe3 abf1 abg7";  //字符串直接量
var r = /ab[c-g][1-7]/g;  //前两个字符为ab,第三个字符为从c到g,第四个字符为1~7的任意数字
var a = s.match(r);  //返回数组["ab","abd6","abe3","abf1","abg7"]
示例5使用反义字符范围可以匹配许多无法直接描述的字符,以实现尽可能减少字符的目的.
var r = /[^0123456789]/g;
在此正则表达式中,将匹配数字以外的任何字符. 反义字符类比简单字符类更强大,更实用. 选择匹配选择匹配类似于JavaScript的逻辑AND操作. 它使用竖线|表示两个子模式之一匹配的描述. 例如:

1)匹配任何数字或字母

var r = /\w+|\d+/;
2)可以定义多种选择模式. 设计方法: 在多个子模式之间添加选择运算符.
var r = /(abc)|(efg)|(123)|(456)/;
为了避免歧义,应该对选择操作的多个子模式使用括号. 示例设计在提交的表单字符串上过滤敏感词. 首先设计一个敏感词列表,然后使用垂直线将它们连接在一起,定义选择匹配模式,最后使用字符串的replace()方法以可显示的编码格式替换所有敏感字符. 代码如下:
var s = '<meta charset="utf-8">';  //待过滤的表单提交信息
var r = /\'|\"|\<|\>/gi;  //过滤敏感字符的正则表达式
function f() {  //替换函数
    ////把敏感字符替换为对应的网页显示的编码格式
    return "&#" + arguments[0].charCodeAt(0) + ";";
}
var a =s.replace(r,f);  //执行过滤替换 
document.write(a);  //在网页中显示正常的字符信息
console.log(a);
结果如下:

重复匹配在正则表达式语法中,定义了一组重复类量词,如下表所示. 它们定义了重复匹配字符的确切或近似数量.

重复的量词列表量词说明

匹配任何包含至少一个n的字符串

匹配任何包含零个或多个n的字符串

js正则表达式常用代码_js定义正则表达式_js使用正则表达式

匹配任何包含零或一个n的字符串

n {x}

匹配包含x n个序列的字符串

n {x,y}

匹配包含至少x个和最多y n个序列的字符串

n {x,}

匹配包含至少x n序列的字符串

示例下面是带有示例的演示,首先设计一个字符串:

var s = "ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle";

1)如果仅匹配单词ggle和gogle,则可以设计:

var r = /go?gle/g;
var a = s.match(r);
量词?表示前面的字符或子表达式是否可选,等效于:
var r = /go{0,1}gle/g;
var a = s.match(r);

2)如果您匹配第四个单词gooogle,则可以设计:

var r = /go{3}gle/g;
var a = s.match(r);
等效于:
var r = /gooogle/g;
var a = s.match(r);

js正则表达式常用代码_js定义正则表达式_js使用正则表达式

3)如果在第4和第6之间匹配单词,则可以设计:

var r = /go{3,5}gle/g;
var a = s.match(r);

4)如果所有单词都匹配,则可以设计:

var r = /go*gle/g;
var a = s.match(r);
量词*表示前面的字符或表达式可能不会出现,或者可能重复出现多次. 等效于:
var r = /go(0,)gle/g;
var a = s.match(r);

5)如果匹配所有包含字符“ o”的单词,则可以设计:

var r = /go+gle/g;
var a = s.match(r);
量词+表示前一个字符或子表达式至少出现一次,并且最大重复次数是无限的. 等效于:
var r = /go{1,}gle/g;
var a = s.match(r);

重复量词始终出现在它们作用的字符或子表达式之后. 如果要作用于多个字符,则需要使用括号将它们包装在一起以形成子表达式. 延迟匹配的重复类量词是贪婪的,如果条件允许js定义正则表达式,它将匹配尽可能多的字符. 示例1中重复次数更多的分类器具有更高的匹配优先级. 下例显示,当多个重复量词同时满足条件时,在确保右边匹配重复次数最少的基础上,最左边的重复量词将占用所有字符.

var s = "<html><head><title></title></head><body></body></html>";
var r = /(<.*>)(<.*>)/
var a = s.match(r);
//左侧表达式匹配"<html><head><title></title></head><body></body></html>"
console.log(a[1]);
console.log(a[2]);  //右侧表达式匹配“</html>”
与贪婪匹配相反,惰性匹配将遵循另一种算法: 以尽可能少的字符匹配条件. 定义惰性匹配: 添加问号?重复类量词后的限制性词. 贪婪匹配体现了最大化匹配的原理,而懒惰匹配体现了最小匹配的原理. 示例2下面的示例演示如何定义匹配模式.
var s = "<html><head><title></title></head><body></body></html>";
var r = /<.*?>/
var a = s.match(r);  //返回单个元素数组["<html>"]
在上面的示例中,对于正则表达式/<.*?>/,它可以返回匹配的字符串“ <>”,但是为了确保匹配条件成立,并且在执行过程中匹配了4个字符的字符串“ html”. 不能违反模式定义的条件来返回惰性值,除非未找到匹配的字符串,否则必须满足该值.

对6种类型的重复惰性匹配的简要说明如下: 边界量词是确定匹配模式位置的边界,例如表的字符串的头或尾.

JavaScript正则表达式支持的边界量词和量词描述

匹配开始. 在多行检测中,它将匹配行的开头.

匹配结尾,在多行检测中,它将匹配一行的结尾

以下代码显示了如何使用边界量词. 首先定义字符串:

var s = "how are you"
1)匹配最后一个单词(c: f: 8: 6: c: 6: 8: 8: 0: 2: 2: f: b: 8 : f: 2: 2: 1: 0: a: e: 6: 1: 7: 3: a: 7: a: f: 5: 9: 9: 6: 6)2)匹配第一个单词
var r = /^\w+/;
var a = s.match(r);  //返回数组["how"]
3)匹配每个单词
var r = /\w+/g;
var a = s.match(r);  //返回数组["how","are","you"]
声明量词表示条件. 声明性词汇包括前向声明和后向声明两种模式. 前向声明指定匹配模式后面的字符必须匹配,但是不返回这些字符. 语法如下:

匹配模式(?=匹配条件)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-154710-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      每日福利
      热点图片
      拼命载入中...