【问题标题】:A regex to find keywords in a import statement在导入语句中查找关键字的正则表达式
【发布时间】:2019-03-10 16:38:15
【问题描述】:

假设我们有以下 import 语句(不是特定于语言的):

import "./test"

import "./test" as Test

import { Test } from "./test"

import { Person as Individual } from "./test"

我正在尝试编写一个正则表达式来检索以下组,以粗体显示:

导入“./test”

import "./test" as 测试

import { 测试 } 来自 "./test"

import { Person as Individual, Test, Bag as Backpack } from "./test"

我尝试编写以下正则表达式:

/^(import)(?:.+?)(\s+from\s+|\s+as\s+)*(?:.+?)$/gm

https://regex101.com/r/4sO59R/1

但它并没有像我预期的那样工作......我只能得到 import...... 应该怎么写呢?

【问题讨论】:

  • 请说明您需要对所有这些捕获执行什么操作:替换、删除、提取、包装?它们是多行文本中的独立字符串还是行?听起来好像您需要一个完整的专用语言解析器。您的正则表达式将不起作用,因为您的组是可选的,并且最后一个 .+? 在该组完全匹配其模式之前将整个文本抓取到字符串的末尾。无论如何,即使您修复它也不支持重复捕获。

标签: javascript regex regex-group


【解决方案1】:

虽然用于捕获数据的理想正则表达式似乎很难,但我能想到的最接近的就是您给定的文本,

^(import)(?:.*?(as))?(?:.*?(as))?(?:.*?(from))*.*$

在这里玩 https://regex101.com/r/7aIudD/1

【讨论】:

    【解决方案2】:

    这可能也有效并且更容易理解。

    \b((^import)|(as)|(from))\b
    

    在这里试试:

    https://regex101.com/r/7aIudD/2

    编辑:我应该补充一下,我刚刚注意到您使用的是 Javascript,因此可能不支持重复捕获。这意味着您可能不得不求助于手动方式来搜索您的字符串(不难)或以某种方式拆分字符串并进行多次搜索。如果问题像你描述的那么简单,我会去手动搜索。

    【讨论】:

    • 您的正则表达式根据 OP 匹配非预期输入文本,例如 'as' 或 'from as' 或 'from' 或 'as from' 等,根据 OP,这是非预期的。 OP 希望它们以特定顺序匹配,并且必须始终以 import 开头。
    • 是的,确实如此,谢谢 - 你的回复做得很好,我昨天投了赞成票!我的一点点努力就通过了他的测试数据,我没有再看下去。无论如何,我认为 Wiktor Stribiżew 的评论是相关的,无论如何都不能使用 Javascript,这就是我添加编辑的原因。
    • 确实,我也很喜欢你对正则表达式的简单而整洁的方法,你想出的至少匹配得很好。感谢您的支持。
    猜你喜欢
    • 2011-05-20
    • 2018-08-10
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多