如何使用 JSON 解析正则表达式文本

How to parse a regex text with Json

本文关键字:正则表达式 文本 何使用 JSON      更新时间:2023-09-26

我有这个字符串,我想将其转换为JSON对象,问题是该对象的字段之一是正则表达式:

"{
     '"regex'": /^([a-zA-Z0-9_''.''-''+%])+''@(([a-zA-Z0-9''-])+''.)+([a-zA-Z0-9]{2,4})+$/,
     '"alertText'": '"test'"
}"

有没有办法在不进行数百次替换的情况下获取 JavaScript 对象?

编辑:我使用以下代码来存储原始对象的正确序列化版本,来自字符串化正则表达式?

RegExp.prototype.toJSON = function() { return this.source; };

然后我可以修改字符串的内容:

{"regex":"^([a-zA-Z0-9_''.''-''+%])+''@(([a-zA-Z0-9''-])+''.)+([a-zA-Z0-9]{2,4})+$","alertText":"* {{alertText}}"}

所以我可以将其用作模板,然后在需要时,JSON.parse 字符串以获取新对象。

只需确保您的正则表达式值用引号括起来,以强制它为字符串值:

"{
     '"regex'": '"/^([a-zA-Z0-9_''.''-''+%])+''@(([a-zA-Z0-9''-])+''.)+([a-zA-Z0-9]{2,4})+$/'",
     '"alertText'": '"test'"
}"

然后,这将正确解析为 JSON 对象,您可以稍后取出正则表达式以从中创建正则表达式。

如果您需要斜杠双重转义以用于正则表达式目的,那么...

 "{
     '"regex'": '"/^([a-zA-Z0-9_''''.''''-''''+%])+''''@(([a-zA-Z0-9''''-])+''''.)+([a-zA-Z0-9]{2,4})+$/'",
     '"alertText'": '"test'"
}"

解决方案:

一种替代解决方案是更改/重新格式化您的 JSON 字符串,您只需要:

  • 将括起来的双引号"更改为单引号'
  • 并且只使用一个反斜杠'进行转义。

这是一个有效的演示:

var text = '{"regex": "/^([a-zA-Z0-9_'.'-'+%])+'@(([a-zA-Z0-9'-])+'.)+([a-zA-Z0-9]{2,4})+$/", "alertText": "test"}';
var obj=JSON.parse(text);
console.dir(obj);
document.write(obj.regex);
document.write("<br>"+obj.alertText);

简短的回答是否定的。

到目前为止,答案依赖于能够在源头更改字符串。 如果你能做到这一点,那就太好了,但根据 OP,你不能使用常用的 JSON.parse() 解析带有正则表达式值的 JSON,即使使用齐磊函数也是如此。