Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配文本中的单词,但不匹配引号或注释中的单词_Javascript_Regex_Visual Studio Code_Vscode Extensions - Fatal编程技术网

Javascript 正则表达式匹配文本中的单词,但不匹配引号或注释中的单词

Javascript 正则表达式匹配文本中的单词,但不匹配引号或注释中的单词,javascript,regex,visual-studio-code,vscode-extensions,Javascript,Regex,Visual Studio Code,Vscode Extensions,我正在为VS代码构建扩展,并使用格式化程序API将所有关键字大写 假设我在编辑器中有代码 TYPE MyStruct : STRUCT this.var1 : POINTER TO INT; (* Указатель 1 *) var2 : POINTER TO INT; (* this is Указатель 2 *) sStr: STRING(200) := "This Test this line&quo

我正在为VS代码构建扩展,并使用格式化程序API将所有关键字大写

假设我在编辑器中有代码

TYPE MyStruct : STRUCT
        this.var1 : POINTER TO INT; (* Указатель 1 *)
        var2 : POINTER TO INT; (* this is Указатель 2 *)
        sStr: STRING(200) := "This 
            Test this line";    
        sStr: STRING(200) := "Test this line";    
        sStr: STRING(200) := 'Test this line';    
    END_STRUCT
END_TYPE

THIS.MyStruct := 100;
我想在注释
(*…*)
或字符串(单引号或双引号)中查找所有
单词但在上

我的尝试是这与ig

(?<=^([^"'])*)\bthis\b

您需要匹配需要放弃的上下文,然后匹配并捕获需要修改的模式实例:

/(?<!\\(?:\\{2})*)"[^"\\]*(?:\\[\s\S][^\\"]*)*"|\(\*[\s\S]*?\*\)|\b(true|false|exit|continue|return|constant|retain|public|private|protected|abstract|persistent|internal|final|of|else|elsif|then|__try|__catch|__finally|__endtry|do|to|by|task|with|using|uses|from|until|or|or_else|and|and_then|not|xor|nor|ge|le|eq|ne|gt|lt|__new|__delete|extends|implements|this|super|AT|BOOL|BYTE|(?:D|L)?WORD|U?(?:S|D|L)?INT|L?REAL|TIME(?:_OF_DAY)?|TOD|DT|DATE(?:_AND_TIME)?|STRING|ARRAY|ANY)\b/gi

您可以简单地添加一个检查来查找所有这些内容。还是这个(因为这就是该关键字的使用方式。请添加您有问题的尝试,即使它不是。)working@MubashirEbad这是一个简单的例子。真正的任务要复杂得多,它包含数百个关键字。
this
实际上是另一个复杂的正则表达式。我简化了任务,但不能使用你的建议。有些关键字是函数ABS,MOD,一些键退出,REURN,一些属性和一些参数等等。因此
\b(我的关键字)\b
工作正常,我只需要在字符串和注释中添加例外。@anubhava添加了。您可以使用这个正则表达式:
/\(\*[^]*?\*\)\[^\]*(?:\.\.^\]*)*“\\\\'[^'\]*(?:\\.\..\.\\\\.[^'\\]*)*”(?:\\\\\.[^'.\\\\\\]*)*”(\b此\b)/gi
和您匹配的文本将在捕获组#1中提供。请参阅演示:由于这个概念,我可以将代码从130行减少到70行。谢谢。我完全忘记了我要替换它。我已经习惯了VS代码语法文件,在该文件中您只定义正则表达式,但无法控制它的排列方式,我忘记了我可以计算eve这是一场激烈的比赛。
/(?<!\\(?:\\{2})*)"[^"\\]*(?:\\[\s\S][^\\"]*)*"|\(\*[\s\S]*?\*\)|\b(true|false|exit|continue|return|constant|retain|public|private|protected|abstract|persistent|internal|final|of|else|elsif|then|__try|__catch|__finally|__endtry|do|to|by|task|with|using|uses|from|until|or|or_else|and|and_then|not|xor|nor|ge|le|eq|ne|gt|lt|__new|__delete|extends|implements|this|super|AT|BOOL|BYTE|(?:D|L)?WORD|U?(?:S|D|L)?INT|L?REAL|TIME(?:_OF_DAY)?|TOD|DT|DATE(?:_AND_TIME)?|STRING|ARRAY|ANY)\b/gi