JavaScript 正则表达式 处理json,json对象的遍历和处理

本文详细介绍了JavaScript中正则表达式用于处理JSON对象的方法,包括正则表达式的实时测试工具、实例讲解、模式匹配以及如何遍历和处理JSON对象。通过实例展示了如何使用正则表达式捕获和处理JSON数据中的键值对,并提供了正则表达式相关的各种元字符和量词的解释。同时,文章还提到了JSON对象的遍历技巧,例如通过正则表达式处理JSON字符串并转换为驼峰式命名。
摘要由CSDN通过智能技术生成

//********* https://www.runoob.com/js/js-regexp.html ****//

  1.  正则表达式.exec(  )
    
  2.   new RegExp("\\{" + i + "\\}", "gm");               g是全局匹配   m表示匹配到的式子后面可以有n位字符
    

//********************** 正则表达式实时测试是否正确 *************************//

不同的环境下正则表达式的一些细节是不相同的,这里介绍两种可用的测试工具:
RegexBuddy http://www.regexbuddy.com/
Javascript正则表达式在线测试工具 https://c.runoob.com/front-end/854

测试
在这里插入图片描述

例如 ret.proto 协议文件
syntax = “proto3”;
option go_package = “app/protos/out/ret”;
package ret;
enum RET {
/*********************************/
//以下同cg.proto中RET一致 禁止修改
ERROR = 0;
OK = 1;
SERVER_MAINTAIN = 2; //服务器维护中
USER_NOT_EXIST = 3; //玩家不存在
USER_NAME_REPEAT = 4; //创角时,角色名字重复
LOGIN_REPEAT = 5; //重复登录
//以上同cg.proto中RET一致 禁止修改
/*********************************/

// service自身错误码从101开始
SERVER_BUSY = 101; //服务器繁忙
SERVER_ERROR = 102; //服务器异常
USER_ACCOUNT_EXISTS = 107; //账号已存在
NOT_ENOUGH_RESOURCES = 108; //资源不够
}

被generate.js的正则表达式处理
let regProto = /(\w+)\s*=\s*(\d+)\s*;\s*(//.+)?/g
let retsProtoDict = {}
while ((match = regProto.exec(retProtoContent)) != null) {
// alert(match[0]+’-’+match[1]);
// console.log(match[1], match[2], match[3])
retsProtoDict[match[1]] = { id: match[2], name: match[1], comment: match[3], lang: “” }
}
match = regProto.exec(retProtoContent 的match就是表达式执行之后的每一行的对象
SERVER_BUSY = 101; //服务器繁忙
SERVER_ERROR = 102; //服务器异常
match[1] 就是每一行对象的第一个属性,在此表示 SERVER_BUSY ,SERVER_BUSY等等
match[2] 就是每一行对象的第二个属性,在此表示 101 ,102 等等
match[2] 就是每一行对象的第三个属性,在此表示 //服务器繁忙 ,//服务器异常

//********************** 实例讲解验证 *************************//

其中 let regProto = /(\w+)\s*=\s*(\d+)\s*;\s*(//.+)?/g 表示
\w+ = \d+ ; // 注释的语句 ?表示可有可无 g表示全局匹配
字符 = 数字 ; // 注释的语句
对照上面的就是 SERVER_MAINTAIN = 2 ; //服务器维护中
对照上面的就是 USER_NOT_EXIST = 3 ; //玩家不存在
对照上面的就是 SERVER_BUSY = 101 ; //服务器繁忙

\s 表示 () = () ; // 中有 /s 的位置的地方都允许有空格

  • 表示任意字符

语法
/正则表达式主体/修饰符(可选)
其中修饰符是可选的。

实例:
var patt = /runoob/i
实例解析:
/runoob/i 是一个正则表达式。
runoob 是一个正则表达式主体 (用于检索)。
i 是一个修饰符 (搜索不区分大小写)。

//*************** js 正则表达式转驼峰*************//

function toLowerLine(str) {
var temp = str.replace(/[A-Z]/g, function (match) { //把str字符串的大写字母找出来 并替换成 “” + “对应大写位子字符的小写”
return "
" + match.toLowerCase();
});
if(temp.slice(0,1) === '’){ //如果首字母是大写,执行replace时会多一个,这里需要去掉
temp = temp.slice(1); //就从索引1开始抽取到末尾,返回给temp 说白了,就是为了去掉开头的 " _ "
}
return temp;
};

使用字符串方法
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

let regProto = /(\w+)\s*=\s*(\d+)\s*;\s*(//.+)?/g

let retsProtoDict = {}
while ((match = regProto.exec(retProtoContent)) != null) {
    // alert(match[0]+'-'+match[1]);
    // console.log(match[1], match[2], match[3])
    retsProtoDict[match[1]] = { id: match[2], name: match[1], comment: match[3], lang: "" }
}

红框内是 表达式主题,
g 是 修饰符 g在js正则表达式中是全局匹配

使用 test()
test() 方法是一个正则表达式方法。
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
以下实例用于搜索字符串中的字符 “e”:
实例
var patt = /e/;
patt.test(“The best things in life are free!”);

使用 exec()
exec() 方法是一个正则表达式方法。
exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
以下实例用于搜索字符串中的字母 “e”:
实例 1
/e/.exec(“The best things in life are free!”);
字符串中含有 “e”,所以该实例输出为:
e

//正则表达式模式***********//

//******************************* 方括号用于查找某个范围内的字符: ******************************************//
表达式 描述
[abc] 查找方括号之间的任何字符。
[0-9] 查找任何从 0 至 9 的数字。
(x|y) 查找任何以 | 分隔的选项。
{m} 表示 \d 或 [0-9] 后面的数字有m位
{m,n} 表示 \d 或 [0-9] 后面的数字有 m 到 n 位
()子表达式

//******************************* 元字符是拥有特殊含义的字符:* ******************************************//
元字符 描述
\d 查找数字。\digitization \数字化
\s 查找空白字符。 \space \字符串
\b 匹配单词边界。\boundary \边界
\uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。

//******************************* 元字符* *************************************//
现在你已经知道几个很有用的元字符了,
如\b,.,
,还有\d.正则表达式里还有更多的元字符,比如\s匹配任意的空白符,包括空格,制表符(Tab), 换行符,中文全角空格等。\w匹配字母或数字或下划线或汉字等。
注:对中文/汉字的特殊处理是由.Net提供的正则表达式引擎支持的,其它环境下的具体情况请查看相关文档。
下面来看看更多的例子:
\ba\w
\b 匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w
),最后是单词结束处(\b)。
\d+ 匹配1个或更多连续的数字。这里的+是和
类似的元字符,不同的是
匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
\b\w{6}\b 匹配刚好6个字符的单词。
表1.常用的元字符
代码 说明

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符 \string \字符串
\d 匹配数字 \digitization \数字化
\b 匹配单词的开始或结束 \boundary \边界
^ 匹配字符串的开始(自会返回^后面得字符串类型,其他得类型都会被自动移除)
$ 匹配字符串的结束
$0 正则表达式捕获到的第0个字符
$1 正则表达式捕获到的第1个字符
$2 正则表达式捕获到的第2个字符
\1 表示前面的()执行的次数为1
\2 表示前面的()执行的次数为2

	var RegExp1 = /^(123)(456)\2$/;
	这个正则表达式匹配到的字符串是
	123456456     可以看出456执行了2次

name.replace(/([A-Z])/g, “-$1”) 假如捕获到的第一个大写字母是 A 就把 A 替换为 _A
即 正则表达式捕获到什么 $1 就是什么

//******************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值