【发布时间】:2020-02-29 19:38:59
【问题描述】:
我正在 typescript 中的 visual-studio-code 中进行扩展。 而且我需要在 '{{>' 前缀之后返回一个单词(结合点和连字符)。
{{>word-test }}
{{> word-test}}
{{> word-test }}
{{> word-test class="class_name"}}
// returns 'word-test'
// On this one the regex doesn't seem to work
{{> word-test
class="class_name"
}}
// returns all the text in the file
{{> word-test.test }}
// returns 'word-test.test'
为了获取单词,我使用了 Visual-studio-code 中内置的 'getWordRangeAtPosition',参数中带有正则表达式。
问题
我尝试了一些正则表达式组合,但是当出现换行符时,我永远不会在 visual-studio-code 中返回“word-test”。 相反,我得到了文件中的所有文本。
这是我尝试过的最新正则表达式组合:
/(?<={{>[ \s]{0,1})(.*?)(?=[\n\s\}\}])/
在正则表达式测试器中一切正常,但在视觉工作室代码本身中却不行。
查看正则表达式测试器:https://regexr.com/4o4d8
【问题讨论】:
-
一些 cmets:1) 空间已经包含在
\s和{0,1}是?,然后是[ \s]{0,1}\s?2) 字符类中的两个相同字符不'没有意义,(?=[\n\s\}\}])[\s}]+3) 许多浏览器(例如Firefox)不支持lookbehind -
你的意思是像
(?<={{>\s*)\w+(?:[.-]\w+)*(?=[\s\S]*?}})regex101.com/r/AxRVG9/1 -
doc 说:“自定义正则表达式将无法匹配多行字符串,并且以速度正则表达式的名义不应匹配带有空格的单词。使用 TextLine。用于更复杂、不冗长的场景的文本。”所以你得到的是预期的行为。您需要使用 TextLine.text。
标签: javascript regex typescript vscode-extensions