假设我必须导入语句
// 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)
谢谢。
答案 0 :(得分:2)
查找以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')
);
答案 1 :(得分:1)
这似乎可行
查找:
/^(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
答案 2 :(得分:0)
尝试一下:
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]