JSON

JavaScript学习笔记(十五)(2)

字号+ 作者:H5之家 来源:H5之家 2017-12-08 18:09 我要评论( )

var re1 = / ABC-001 / ; var re2 = new RegExp(" ABC\-001 " );re1; // /ABC-001/ re2; // /ABC-001/ 注意: 如果使用第二种写法,因为字符串的转义问题,字符串的两个\实际上是一个。 先看看如何判断正则表达式是

var re1 = /ABC-001/; var re2 = new RegExp("ABC\-001"); re1; // /ABC-001/ re2; // /ABC-001/

注意:如果使用第二种写法,因为字符串的转义问题,字符串的两个\实际上是一个。

先看看如何判断正则表达式是否匹配:

var re = /^d{3}-d{3,8}$/; re.test("010-12345"); // true re.test("010-1234x"); // false re.test("010 12345"); // false

Reg百色新闻网Exp对象的test()方法用于测试给定的字符串是否符合条件

切分字符串

正则表达式可以用来切分字符串,比用固定的字符更灵活:

正常的切分代码,无法识别连续的空格

"a b c".split(" "); // ["a", "b", "", "", "c"]

采用正则表达式,无论多少个空格都可以正常分割

"a b c".split(/s+/); // ["a", "b", "c"]

加入试试:

"a,b, c d".split(/[s,]+/); // ["a", "b", "c", "d"]

再加入;试试:

"a,b;; c d".split(/[s,;]+/); // ["a", "b", "c", "d"]

如果用户输入了一组标签,可以用正咸宁新闻网则表达式把不规则的输入转化成正确的数组。

分组

正则表达式除了简单的判断是否匹配外,还可以用来提取子串,用( )表示的就是要提取的分组(group)。

正则表达式^(d{3})-(d{3,8})$定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码。

var re = /^(d{3})-(d{3,8})$/; re.exec("010-12345"); // ["010-12345", "010", "12345"] re.exec("010 12345"); // null

如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来。

exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。

exec()方法在匹配失败时返回null

Tips通过正则表达式提取子串很强大。

下面这个正则表达式可以直接识别合法的时间

var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/; re.exec("19:05:30"); // ["19:05:30", "19", "05", "30"]

但是有些时候,正则表单式也无法做到完全验证,比如,识别日期:

var re = /^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$/;

对于"2-30""4-31"这样的非法日期,用正则还是识别不了,或者说写出来非常困难,这时就需要程序配合识别了。

贪婪匹配

贪婪模式:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

非贪婪模式:就是匹配到结果就好,就少的匹配字符。

默认是贪婪模式;在量词后面直接加上一个问号就是非贪婪模式。

举例如下,匹配出数字后面的0:

var re = /^(d+)(0*)$/; re.exec("102300"); // ["102300", "102300", ""]

由于d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。

必须让d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让d+采用非贪婪匹配:

var re = /^(d+?)(0*)$/; re.exec("102300"); // ["102300", "1023", "00"]

全局搜索

JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配:

var r1 = /test/g; r2 = new RegExp("test", "g");

全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引:

var s = "JavaScript, VBScript, JScript and ECMAScript"; var re=/[a-zA-Z]+Script/g; // 使用全局匹配: re.exec(s); // ["JavaScript"] re.lastIndex; // 10 re.exec(s); // ["VBScript"] re.lastIndex; // 20 re.exec(s); // ["JScript"] re.lastIndex; // 29 re.exec(s); // ["ECMAScript"] re.lastIndex; // 44 re.exec(s); // null,直到结束仍没有匹配到

注意:全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次。

正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配

JSON

JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

JSON实际上是JavaScript的一个子集,JSON的几种数据结构如下:

以及上面的任意组合。

注意:JSON规定字符集必须是utf-8,为了统一解析,JSON的字符串规定必须用双引号“ ”object的键也必须用双引号“ ”

把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。

如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。

序列化

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评