如何将正则表达式转换为String文字并再次返回?

时间:2016-07-02 13:33:46

标签: javascript regex

我怎么能:

  1. 将带有标志的JavaScript RegExp转换为字符串文字(想想JSON),
  2. 并将该文字转换回正则表达式?
  3. 例如使用字符串"the weather is nice today"

    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

3 个答案:

答案 0 :(得分:5)

查看RegExp原型上的访问者属性,例如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]的元组,然后使用{{1}重新构造它}}。这似乎比尝试使用正则表达式或eval它分开它更清晰。例如,您可以将其字符串化为

new RexExp(source, flags)

在回来的路上你可以使用function stringifyWithRegexp(o) { return JSON.stringify(o, function replacer(key, value) { if (value instanceof RegExp) return [value.source, value.flags]; return value; }); } 和reviver来恢复正则表达式。

修改regexps

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

JSON.parse

答案 1 :(得分:3)

我不确定此代码是否适用于所有情况,但我确信这可以使用正则表达式完成:

curl_easy_setopt(curl, CURLOPT_USERNAME, "myusername@mail.mydomain.com");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "mypassword);
curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.mydomain.com:25");
curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
recipients = curl_slist_append(recipients, TO);
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_size);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, fileBuf_source);
curl_easy_setopt(curl, CURLOPT_READDATA, &file_upload_ctx);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //Dont display Curl Connection data Change 1L to 0

res = curl_easy_perform(curl);

Regular expression visualization

Debuggex Demo

答案 2 :(得分:2)

您可以使用eval取回正则表达式:

var myRe = RegExp("weather", "gi");
var myReString = myRe.toString();
eval(myReString); // => /weather/gi

注意:eval can execute arbitrary javascript expression.仅当您确定字符串是使用正则表达式eval方法生成时才使用toString