繁体   English   中英

正则表达式对JavaScript块注释执行全局匹配

[英]Regex to perform global match on javascript block comments

注意,这里的目标不是词法分析,所以请不要建议词法分析或语法分析。 而且,我为增加“正则表达式评论”问题而道歉,但是最好的(投票最多的) 错误答案 (考虑到根据问题如何使用结果的上下文)是不够的(尽管我能够开始从那里开始),以及我已经查看过的许多其他答案都与我要执行的操作无关。

我已经建立了预期的原理工作正则表达式在这里


/(?:\n|^)(?:[^'"])*?(?:'(?:[^\\\r\n]|[\\]{2}|\\')*'|"(?:[^\\\r\n]|[\\]{2}|\\")*")*?(?:[^'"])*?(\/\*(?:[\s\S]*?)\*\/)/g

最后一组与块注释匹配得很好,作为上述SO中的参考:

(\/\*(?:[\s\S]*?)\*\/)

实际匹配之前的所有内容都将被丢弃,但用于匹配有效的块注释的目的,即在字符串文字中找不到。

忽略正则表达式看起来像是块注释的情况。

假设输入字符串是线性的,不是自由格式的javascript。


实际上 ,我在第一场比赛中得到了一个副本,而没有其他比赛。

为什么? 在实践中如何纠正?

在此先感谢您的帮助,以及任何可能使您遇到的麻烦。 :)

同样,在下面的信息中,(在评论部分)欢迎任何可能的维修区掉落。

与直接问题无关的其他信息:如示例代码所示,最终目标是以某种方式替换/折叠任何嵌套的或其他代码结构,以便将精力集中在用于词法作用域顶部的变量声明上。给定的代码补丁-用于提升变量声明的目的,以生成特定用例的模板。 我知道这听起来像是一个负担,但我相信这是有可能且相对简单的-并非完全简单地进行更换-但还是如此。 为了参考“可能”的含义,我宁愿只折叠正则表达式,块注释和内联注释EDIT:以及字符串文字/ EDIT,然后递归地仅折叠{blocks}中的变量作用域(或普通对象)(所有它们不包含任何嵌套块),直到它们消失了,然后看看还剩下什么。 如果由于某种原因似乎无法使用,请仅在评论中回复。 谢谢!

这就是“哦,是的,当然!”之一。 片刻。

exec()函数将生成一个包含1个元素的数组,即匹配的元素。 除非不是, 否则第一个元素是完全匹配, 除非有捕获组,否则这是很好的匹配。 如果存在,则除了result[0]是完整模式匹配之外, result[1]将是第一个捕获组, result[2]是第二个捕获组,依此类推。

例如:

  1. (/l/g).exec("l")给我们["l"]
  2. (/(l)/g).exec("l")给我们["l", "l"]

您的问题不是很多(尽管通过带过滤块注释的流过滤器运行字符串可能更容易使用),而更多情况是假设您可以在exec上使用.join() 。结果一直困扰着您。 如果您有捕获组,并且有结果,请在加入前加入results.slice(1)或调用results.splice(1,0)来除去前导元素,因此不要意外地包含完整匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM