注意,这里的目标不是词法分析,所以请不要建议词法分析或解析代码。而且,我为增加“正则表达式评论”问题的混乱而道歉,但最好的(投票最多的)错误答案(考虑到如何根据问题使用结果的上下文)是不充分的,(尽管我能够开始从那里开始)以及我审查过的许多其他答案与我正在尝试做的事情完全无关。
我已经建立了一个正则表达式,它原则上按这里预期的那样工作。
/(?:\n|^)(?:[^'"])*?(?:'(?:[^\\\r\n]|[\\]{2}|\\')*'|"(?:[^\\\r\n]|[\\]{2}|\\")*")*?(?:[^'"])*?(\/\*(?:[\s\S]*?)\*\/)/g
最后一组与块注释很好地匹配,如上述 SO 中的引用:
(\/\*(?:[\s\S]*?)\*\/)
实际匹配之前的所有内容都将被丢弃,但用于匹配有效的块注释 - 即不是在字符串文字中找到的内容。
忽略正则表达式可能看起来像块注释的情况。
假设输入字符串是 linted,而不是自由格式的 javascript。
但在实践中,我在第一场比赛中得到了重复,而没有其他比赛。
为什么?在实践中如何纠正它?
在此先感谢您的帮助以及问题可能给您带来的任何麻烦。:)
此外(在评论部分)欢迎任何潜在的坑跌落,给出以下信息。
与直接问题无关的额外信息:如示例代码中所暗示的,最终目标是替换/折叠任何嵌套或其他代码结构,以便专注于词法范围顶部的变量声明给定的代码补丁 - 用于提升变量声明,为特定用例生成模板。我知道这听起来像是一个负担,但我相信这是可能的并且相对简单 - 不完全是简单的更换 - 但仍然如此。为了参考我所说的“可能”,我宁愿只折叠正则表达式、块注释和内联注释 EDIT: 和字符串文字 /EDIT,然后递归地只折叠 {blocks} 中的变量范围(或普通对象)(所有它们不包含任何嵌套块)直到它们消失,然后看看还剩下什么。如果这似乎因任何原因不起作用,请仅在评论中回复。谢谢!