查找最后一个导入语句的索引
Finding the index of the last import statement
我正在使用 Node 的fs.readFileSync(file)
读取文件。我需要找到导入语句最后一次出现的索引。
我正在阅读的js文件将如下所示:
import React from 'react';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { mount } from 'react-mounter';
import { AppLayout } from '../../ui/layouts/AppLayout';
import HomePage from '../../ui/pages/HomePage';
FlowRouter.route('/', {
name: 'home',
action() {
mount(AppLayout, {
content: (<HomePage />)
});
}
});
因此,在这种特殊情况下,我需要找到此导入语句的分号索引:import HomePage from '../../ui/pages/HomePage';
因为它是最后一个。
我已经研究了str.lastIndexOf(searchValue[, fromIndex])
但它需要一个字符串作为searchValue
,在这种情况下,我需要传入正则表达式。
似乎我需要一个可以反向查找的正则表达式。
如何匹配并获取上次出现的导入的索引?
我认为您要找到的是最后一行,以import
开头,并在它之后插入另一行。有几种方法。
拼接和indexOf
:
// splice code from http://stackoverflow.com/a/4314050/3832970
String.prototype.splice = function(idx, rem, str) {
return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};
var input = "import React from 'react';'nimport { FlowRouter } from 'meteor/kadira:flow-router';'nimport { mount } from 'react-mounter';'nimport { AppLayout } from '../../ui/layouts/AppLayout';'nimport HomePage from '../../ui/pages/HomePage';'n'nFlowRouter.route('/', {'n name: 'home','n action() {'n mount(AppLayout, {'n content: (<HomePage />)'n });'n }'n});";
var strt = input.lastIndexOf("'nimport ");
strt = input.indexOf("'n", strt+1);
document.body.innerHTML = "<pre>" + input.splice(strt+1, 0, "import Example from ''../../example'';'n") + "</pre>";
在这里,strt = input.lastIndexOf("'nimport ")
找到换行符之后的最后一import
,后面跟一个空格。然后,找到下一个换行符,位置用 strt = input.indexOf("'n", strt+1);
递增。然后我们只需插入带有 splice
的字符串。
正则表达式:
var input = "import React from 'react';'nimport { FlowRouter } from 'meteor/kadira:flow-router';'nimport { mount } from 'react-mounter';'nimport { AppLayout } from '../../ui/layouts/AppLayout';'nimport HomePage from '../../ui/pages/HomePage';'n'nFlowRouter.route('/', {'n name: 'home','n action() {'n mount(AppLayout, {'n content: (<HomePage />)'n });'n }'n});";
document.body.innerHTML = "<pre>"
+ input.replace(/^(?:['s'S]*'n)?import .*(?:'r?'n|'r)/,
'$&import Example from ''../../example'';'n')
+ "</pre>";
在这里,正则表达式匹配:
-
^
- 字符串的开头 -
(?:['s'S]*'n)?
- 一个由 0+ 任何字符组成的可选序列,尽可能多地到达最后一个 -
import
- 带空格的文本字符串import
-
.*
- 后跟 0+ 除换行符以外的任何字符(以匹配行的其余部分) -
(?:'r?'n|'r)
- 匹配换行符。您可以在此之后添加?
以确保我们匹配字符串中的最后一行。
在替换中,我使用了 $&
,对整个匹配项的反向引用(它将整个匹配项插入到结果字符串中)。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 名称输入的索引
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 自动修复”;语句前缺少分号“;
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在索引.html和应用.js [node.js] 之间共享变量
- 带有多个elseif的Javascript if语句
- 这个条件语句的逻辑有问题
- 索引和 if 语句
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 如何在datatablejs中用一条语句对多个表使用索引列
- Isset / empty PHP session (if else语句)给出未定义的索引
- 查找最后一个导入语句的索引