Javascript 正则表达式匹配文本中的单词,但不匹配引号或注释中的单词
我正在为VS代码构建扩展,并使用格式化程序API将所有关键字大写 假设我在编辑器中有代码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
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