如何使用 JSON 解析正则表达式文本
How to parse a regex text with Json
我有这个字符串,我想将其转换为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,即使使用齐磊函数也是如此。
相关文章:
- JavaScript正则表达式文本与RegExp对象
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 匹配某个字符后所有文本的正则表达式是什么
- 正则表达式,用于从html格式的字符串中提取文本
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- Jquery 替换所有文本语法正则表达式中的变量
- 如何使用 JSON 解析正则表达式文本
- 使用 JavaScript 正则表达式替换文本中的类似字符串
- 返回Javascript中给定正则表达式的文本范围数组
- 从正则表达式文本中获取正则表达式字符串表示的最佳方式
- 为什么我的 Javascript 中的两个正则表达式文本在一个属性上有所不同
- 正则表达式匹配不在字符串或正则表达式文本中的 JS 源
- 正则表达式文本中的Unicode代码点转义-Javascript
- 在正则表达式文本中的字符类中使用/总是安全的
- 何时使用RegExp构造函数vs正则表达式文本
- javascript中的正则表达式文本插入
- Javascript正则表达式匹配模式,但不匹配正则表达式文本(r.js优化器和uglify问题)
- 正则表达式文本/数字提取
- 正则表达式文本合并
- 如何在 JavaScript 中连接正则表达式文本