Regex对javascript块注释执行全局匹配
Regex to perform global match on javascript block comments
注意,这里的目标不是词法分析,所以请不要建议对代码进行词法分析或解析。而且,我为添加了"正则表达式评论"问题而道歉,但最好(投票最多(的坏答案(考虑到如何根据问题使用结果的上下文(是不够的(尽管我能够从那里开始(,我审查的许多其他答案与我试图做的事情根本无关。
我已经构建了一个正则表达式,它在原理上与这里预期的一样工作。
/(?:'n|^)(?:[^'"])*?(?:'(?:[^'''r'n]|['']{2}|''')*'|"(?:[^'''r'n]|['']{2}|''")*")*?(?:[^'"])*?('/'*(?:['s'S]*?)'*'/)/g
最后一组很好地匹配块注释,如以上SO:中的参考
('/'*(?:['s'S]*?)'*'/)
实际匹配之前的所有内容都将被丢弃,但用于匹配有效的块注释,即在字符串文字中找不到任何内容。
忽略正则表达式可能看起来像块注释的情况。
假设输入字符串是linted,而不是自由格式的javascript。
但在练习中,我在第一场比赛中得到了一个副本,而在其他比赛中没有。
为什么?如何在实践中纠正它?
提前感谢您的帮助以及这个问题可能给您带来的任何麻烦。:(
此外(在评论部分(根据以下信息,欢迎任何潜在的坑落。
与直接问题无关的额外信息:正如示例代码中所暗示的,最终目标是替换/折叠任何嵌套或其他代码结构,以便关注给定代码补丁的词法范围顶部的变量声明,以便提升变量声明,为特定用例生成模板。我知道这听起来像是一种负担,但我相信这是可能的,而且相对来说是直接的——不是完全通过简单的更换——但无论如何。对于我所说的"可能",我更喜欢只折叠regexs、块注释和内联注释EDIT:和字符串文字/EDIT,然后递归地只折叠{block}中的变量作用域(或普通对象((所有这些都不包含任何嵌套块(,直到它们消失,然后看看剩下什么。如果出于任何原因,这似乎都不起作用,请只在评论中回应。非常感谢。
这是其中一个"哦,是的,当然!"的时刻。
exec()
函数将生成一个包含1个元素的数组,该元素是匹配的元素。除此之外,第一个元素是完全匹配,这很好,除非有捕获组。如果存在,那么除了result[0]
是完全模式匹配之外,result[1]
将是第一个捕获组,result[2]
将是第二个捕获组等等
例如:
(/l/g).exec("l")
给了我们["l"]
(/(l)/g).exec("l")
给了我们["l", "l"]
您的RE与其说是问题所在(尽管通过流过滤器运行字符串可能更容易处理块注释(,不如说是假设您可以在导致问题的exec
结果上使用.join()
。如果您有捕获组,并且有结果,请加入results.slice(1)
,或者在加入之前调用results.splice(1,0)
以去掉前导元素,这样就不会意外地包含完全匹配。
- 匿名自执行js函数内部的全局变量在外部仍然可用
- webpack在全局范围内执行模块
- 全局安装的NodeJS npm模块不执行节点的主/bin JavaScript文件
- JavaScript是否具有等效于VBScript's执行全局
- javascript中的全局和局部变量执行上下文
- 在全局范围内执行文件,而不是返回导出的对象
- 全局 JS 文件:仅执行一次 JSON 调用
- 仅在某个 URL 处在全局文件中执行 Javascript
- jQuery全局/本地事件执行顺序
- 如果之前在X秒内调用,则阻止并排队执行操作(但仅全局执行一次)
- 在匿名自执行函数中定义全局函数
- 全局执行上下文是否可能从执行堆栈中弹出
- 包含函数的对象文字表示法的执行速度是否比(全局范围)普通函数(取消引用)更快
- 向数组中存储的全局函数传递参数并执行全局函数
- 我可以在全局执行上下文中运行javascript没有eval
- 如何设置变量指向全局对象-独立于上下文执行
- 如果requireJS模块在$上设置了全局变量,我如何仅在全局变量被分配时执行模块代码
- 每当我尝试将一些修改后的值赋给脚本标记内的全局声明变量时,脚本标记就会停止执行.为什么
- 如果在Ext.application()执行之前需要全局帮助函数,我应该将它们放在哪里?
- Javascript:为什么具有全局执行上下文的回调函数可以访问作用域变量