我怎么能:
例如使用字符串"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。
答案 0 :(得分:5)
查看RegExp
原型上的访问者属性,例如source
和flags
。所以你可以这样做:
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来恢复正则表达式。
如果要在保留标志的同时修改正则表达式,可以使用修改后的源和相同的标志创建新的正则表达式:
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);
答案 2 :(得分:2)
您可以使用eval
取回正则表达式:
var myRe = RegExp("weather", "gi");
var myReString = myRe.toString();
eval(myReString); // => /weather/gi
注意:eval
can execute arbitrary javascript expression.仅当您确定字符串是使用正则表达式eval
方法生成时才使用toString
。