我需要在JavaScript源文件中重写一些require路径:
示例(foo
=> ../../../foo/baz
):
var a = require('foo/a');
=> var b = require('../../../foo/baz/a');
var a = require('foo/../b');
=> var b = require('../../../foo/baz/../b');
注意:此替换将在完整的js源文件上完成。因此require('
,')
必须用作分隔符!
到目前为止,我们已经确定要使用这样的设置:
var source = '';
source += "var a = require('foo/a');\n";
source += "var b = require('foo/../b');\n";
source += "console.log(a + b);";
var options = {
'foo': '../../../foo/baz'
};
for (var key in options) {
var regex = new RegExp('require[(](\"|\')' + key, 'g');
source = source.replace(regex, "require('" + options[key]);
}
console.log(source);
虽然上面的源代码正在工作。我不确定是否保存了,因为我只是跳过了结束定界符。
我认为这样做:
str = str.replace(/require\((['"])([^'"]*)foo\/([^'"]*)(['"])/g, "require($1$2../../../foo/baz/$3$4");
这是正则表达式直播:http : //regex101.com/r/bE5jI4
说明:
require
require
从字面上匹配字符(区分大小写)
\(
(
从字面上匹配字符
第一捕获小组 (['"])
['"]
匹配'
或"
字面上匹配第二捕获小组 ([^'"]*)
[^'"]*
匹配以下列表中不存在的单个字符
'"
'"
从字面上看列表中的单个字符
foo
foo
从字面上匹配字符(区分大小写)
\/
/
从字面上匹配字符
第三捕获小组 ([^'"]*)
[^'"]*
匹配以下列表中不存在的单个字符
量词:在0到无限制的时间之间,尽可能多的次数,并根据需要返回[贪婪]
'"
'"
从字面上看列表中的单个字符
第四捕获小组 (['"])
['"]
匹配'
或"
字面上如果在引号前有可选的空格,或者您的路径可能包含'
或"
字符,则可能需要对其进行调整。(在后一种情况下,您将需要两次替换,一次是包装引号是'
,而另一次是引号"
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句