假设我必须导入语句
// other code...
import * as Foo from "../some/bar";
import { baz } from './dir/qux';
// other code...
我想在上面的每个文件末尾添加一个.js
扩展名,用单引号/双引号引起来,如下所示
import * as Foo from "../some/bar.js";
import { baz } from './dir/qux.js';
在整个代码字符串中。
在JavaScript中替换正则表达式的正确方式是什么?
在global
和case
匹配中
str.replace(regexp, newSubstr|function)
谢谢。
发布于 2018-08-15 09:04:53
这似乎行得通
查找:
/^(import[^\S\r\n].+?[^\S\r\n]from[^\S\r\n]*(["']))((?:(?!(?:\.js)?\2)[\S\s])+)(\2\s*;)/mg
替换:
$1$3.js$4
https://regex101.com/r/Obcf0S/1
可读的正则表达式
^ # BOL
( # (1 start), Preamble
import [^\S\r\n] .+?
[^\S\r\n]
from [^\S\r\n]*
( ["'] ) # (2), Delimiter
) # (1 end)
( # (3 start), Body
(?:
(?!
(?: \.js )?
\2
)
[\S\s]
)+
) # (3 end)
( \2 \s* ; ) # (4), Postfix
发布于 2018-08-15 08:51:46
查找以import
开头且包含斜杠、后跟非斜杠、非句点字符的行,并提前查找['"];?
以标识字符串和行尾:
const codeStr = `
// other code...
import * as Foo from "../some/bar";
import { baz } from './dir/qux';
import { bar } from './dir/bar.js';
// other code...
`;
console.log(
codeStr.replace(/import .+\/[^\/\.]+(?=['"];?$)/gm, '$&.js')
);
发布于 2018-08-15 08:57:33
试试这个:
let match = /(import.*)("|');/g.exec(`import { baz } from './dir/qux';`)
然后,您将获得以下列表:
(3) ["import { baz } from './dir/qux';", "import { baz } from './dir/qux", "'", index: 0, input: "import { baz } from './dir/qux';", groups: undefined]
您只需要在元素1和元素2之间添加.js。
match[1]+".js"+match[2]
https://stackoverflow.com/questions/51851456
复制相似问题