gpt4 book ai didi

javascript - JS : finding regexp literals in code

转载 作者:行者123 更新时间:2023-11-30 12:47:11 25 4
gpt4 key购买 nike

我正在解析一些 JavaScript 代码,需要获取其中的所有正则表达式。文字符号 /\/(.(?:[^\/])|\\)+\/[gmi]*/gi看起来不错,但在某些情况下它无法正常工作。

例如,对于这段代码:

html = html.replace(/\</g, '&lt;').replace(/\>/g, '&gt;').replace(/\&/g, '&amp;');

match() 给出了两个愚蠢的结果:/\</g, '&lt;' ).replace( //\&/g

我似乎无法让它工作。

最佳答案

您不会使用单个正则表达式来解决这个问题。您现在偶然发现了一个您的正则表达式无法正确处理的极端情况,但还有很多很多。当多行或单行注释中有一个开头的正则表达式文字时,或者当 / 出现在字符串文字中时,您的正则表达式将会中断。

唯一可靠地解决这个问题的方法是解析 JavaScript,并检查解析器(或词法分析器)生成的 token 流。

要开始,请参阅:JavaScript parser in JavaScript

user3371384 wrote:

I don't care about comments, because I remove them before getting regexp literals, same about strings.

无论如何,还有更多的极端情况:

var e = 8, f = 4, g = 2;
// ...
var x = e/f/g; // your regex will match `/f/g` as a regex literal

user3371384 wrote:

In many code parsers the same algorythm is used: find slash, then find next slash (if no backslash before it), all chars inside is regexp.

这很可能是,但这是一个非常不准确的算法(正如您在我上面给出的反例中看到的那样)。还有可能会破坏正则表达式的速记 /=

无论如何,您似乎已经决定为此使用正则表达式...

您将 . 放在了错误的位置:您只想匹配反斜杠 之后的任何字符。试试这个:

/\/([^\/]|\\.)+\/[gmi]*/gi

关于javascript - JS : finding regexp literals in code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com