javascript - 如何将正则表达式转换为字符串文字并再次转换回来?

标签 javascript regex

我怎样才能:

  1. 将带有标志的 JavaScript RegExp 转换为字符串文字(想想 JSON),
  2. 然后将该文字转换回正则表达式?

例如对于字符串“今天天气很好”:

var myRe = new RegExp("weather","gi");
var myReToString = myRe.toString(); // myReToString is now "/weather/gi"

var myReCopy = /* How to get this copy only from myReToString ? */

要修改原始 RegExp 属性,请参阅 torazaburo's answer .

最佳答案

查看 RegExp 原型(prototype)上的访问器属性,例如 sourceflags。所以你可以这样做:

var myRe = new RegExp("weather", "gi")

var copyRe = new RegExp(myRe.source, myRe.flags); 

有关规范,请参阅 http://www.ecma-international.org/ecma-262/6.0/#sec-get-regexp.prototype.flags .

序列化和反序列化正则表达式

如果您这样做的目的是将正则表达式序列化,例如转换为 JSON,然后将其反序列化,我建议将正则表达式存储为 [source, flags] 的元组,并且然后使用 new RexExp(source, flags) 重构它。这似乎比尝试使用 regexp 或 eval'ing 将其分开要干净一些。例如,您可以将其字符串化为

function stringifyWithRegexp(o) {
  return JSON.stringify(o, function replacer(key, value) {
    if (value instanceof RegExp) return [value.source, value.flags];
    return value;
  });
}

在返回的路上,您可以使用 JSON.parse 和 reviver 来取回正则表达式。

修改正则表达式

如果你想在保留标志的同时修改正则表达式,你可以用修改后的源和相同的标志创建一个新的正则表达式:

var re = /weather/gim;
var newre = new RegExp(re.source + "| is", re.flags);

关于javascript - 如何将正则表达式转换为字符串文字并再次转换回来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160746/

相关文章:

javascript - 如何在 Javascript 中提取 URL 的结尾?

javascript - 知道何时下载 ObjectUrl 的方法(撤销它...)

javascript - 将参数传递给 Javascript 中的模块模式

javascript - jQuery SlideToggle 不关闭 Div

java - java中的正则表达式,组匹配

javascript - Grails Assets 管道和外部JS库

sql - MS-SQL 2008 全字匹配

JavaScript 和正则表达式 : How do I check if the string is ASCII only?

python - 如何从 Python 正则表达式中获取匹配的字符?

javascript - 我想匹配不以字母 [aoieu] 开头的单词,但正则表达式不起作用