JS regex从一个函数字符串中提取多行参数
JS regex to extract multiline arguments from a function string
我正在努力得到一个javascript正则表达式工作在一些边缘情况。
目标是用一些js代码获取一个字符串,并使用原始参数重写一个函数。一个简单的例子是:'apples("a", 1, {value: 2})'
变成'bananas("a", 1, {value: 2})'
。然而,当你处理实际的代码时,它就有点复杂了。例如,用嵌套函数、返回语句和多行对象替换"承诺"版本的函数:
string = 'function(){
return Request({
json:true,
url: "http://google.com"
method: "GET"
})
}'
在这种情况下,我期望的结果是:
string = 'function(){
return newPromiseFunction({
json:true,
url: "http://google.com"
method: "GET"
}).then(function( res ){ console.log(res) })
}'
所以我最好的尝试是:
var substring = string.match(/'return'sRequest+'(.+?')/g );
var argsString = substring[0].match( /'((.*?)')/ );
var result = 'return newPromiseFunction('+ argsString + ').then(function( res ){ console.log(res) })}'
然而,这段代码只有在参数中没有换行符和制表符的情况下才有效。但是多行对象(如上所述)将失败。
是否有一个简单的修复我的正则表达式上面?有更简单的方法吗?regex是解决这个问题的最好方法吗?
这似乎行得通:
var codestring = `function(){
return Request({
json:true,
url: "http://google.com"
method: "GET"
})
}`;
var reg = /return's+Request'(('{['S's]*?'})')/g;
var result = codestring.replace(reg, "return newPromiseFunction($1).then(function( res ){ console.log(res) })");
alert(result);
请注意,反引号用于为codestring创建多行字符串。
如果您的解析器不支持ES6,可能需要更改它。
而不是match &字符串连接,它现在是一个即时替换。
但这只是一种选择。使用另一种方法可以得到相同的结果。
另外,由于.
不覆盖换行符,所以用['S's]*?
代替.*?
。
给你:
var code = `function() {
return Request({
json: true,
url: "http://google.com"
method: "GET"
});
}`
var result = code.replace(/return's+Request's*'(([^')]*)')/g,
(m, g1) => 'return newPromiseFunction('+ g1 + ').then(function( res ){ console.log(res) })}'
);
logs.innerText = result;
<pre id="logs"></pre>
相关文章:
- 如何在Javascript中从字符串中提取某些单词
- innerHTML的子字符串可以在初始调用时提取吗
- 从字符串中提取年份的Javascript正则表达式
- 使用javascript从字符串中提取浮点数
- 如何使用另一个字符串作为模板从字符串中提取数据
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- 正在从字符串中提取日期
- 使用gulp-angular gettext从JS文件中提取字符串不起作用
- 如何在系列数据中包含字符串以提取工具提示点格式
- 通过正则表达式从字符串中提取Url
- 正则表达式,用于从html格式的字符串中提取文本
- Javascript:如何通过Regexp从属性中提取字符串
- 如何删除“"使用javascript从字符串中提取字符
- 如何从由“”分隔的字符串中提取最后一个文本|&”;
- 从html标记格式的字符串中提取键值对
- 简单的javascript字符串提取
- 如何通过jquery或javascript从日期字符串提取日期格式
- 在Javascript中从字符串提取值到数组
- 如何将元组字符串提取到数据结构中
- 我如何从JavaScript中的URL字符串提取值