如何将ECMAScript正则表达式转换为VS Code搜索可用格式?
将ECMAScript正则转换为VS Code搜索可用格式
我有一个在ECMAScript模式下可正常运行的正则表达式:/(?<=<TOTA>[^]+\blength=")[^"]+(?="[^]+<\/TOTA>)/g,需要将其转换为VS Code搜索功能支持的格式。相关XML文件示例如下:
<TxDef encoding="EBCDIC" txAdapter="Unisys" appAdapter="pass" xmlTransformer="Unisys" transportAdapter="SystemF" targetTx="" txMapper="" delimiter="" memo="pp"> <TITA> <TxBlock dataTag="" renderTag="Y" memo="" ref="SystemF-TITA-COM-AREA" /> <TxField id="BCURCD" cname="cc" datatype="9" lengthtype="F" padchar=" " justify="" default="" length="2" lengthExpr="" scale="0" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> <TxField id="STATUS" cname="c6" datatype="9" lengthtype="F" padchar=" " justify="" default="" length="1" lengthExpr="" scale="0" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> <TxField id="END" cname="gg" datatype="X" lengthtype="F" padchar=" " justify="" default="" length="1" lengthExpr="" scale="0" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> </TxBody> <TxTail dataTag="" renderTag="Y" memo="" ref="" /> </TITA> <TOTA> <TxHead dataTag="" renderTag="Y" memo="" ref="" /> <TxBody dataTag="CommMsg" renderTag="Y" memo="" ref=""> <TxRepeat dataTag="TXREC" renderTag="Y" memo="" timesField="" timesValue="-1" name=""> <TxBlock dataTag="Header" renderTag="N" memo="" ref="SystemF-TOTA-BASIC-TxBlock" /> <TxSwitch dataTag="" renderTag="N" memo="" switchField="WARN"> <TxCase dataTag="" renderTag="N" memo="" value="[default]"> <TxRepeat dataTag="TXREC" renderTag="N" memo="" timesField="" timesValue="1" name=""> <TxField id="CNAME" cname="ed" datatype="X" lengthtype="F" padchar=" " justify="" default="" length="80" lengthExpr="" scale="0" tagSize="0" lengthSize="0" encoding="UNISYS" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> <TxField id="AVBAL" cname="b7" datatype="S" lengthtype="F" padchar=" " justify="" default="" length="14" lengthExpr="" scale="2" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> <TxField id="AVG03" cname="hh" datatype="9" lengthtype="F" padchar=" " justify="" default="" length="13" lengthExpr="" scale="2" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> <TxField id="AVG1" cname="1m" datatype="9" lengthtype="F" padchar=" " justify="" default="" length="13" lengthExpr="" scale="2" tagSize="0" lengthSize="0" encoding="" shiftInOut="Y" invisibleChar="TrimAndPadRight" memo="" optional="N" overwrite="N" codec="" renderTag="" charFormat="" /> </TxRepeat> </TxRepeat> </TxCase > </TxSwitch > </TxRepeat > </TxBody> <TxTail dataTag="" renderTag="Y" memo="" ref="" /> </TOTA> </TxDef>
转换步骤
- 移除正则表达式首尾的分隔符
/ - 将原正则中的
[^]替换为[\s\S](VS Code支持[^],但[\s\S]兼容性更广泛,确保匹配所有字符包括换行) - 移除全局匹配标识
g(VS Code搜索默认全局匹配,无需额外声明)
转换后的最终正则:
(?<=<TOTA>[\s\S]+\blength=")[^"]+(?="[\s\S]+<\/TOTA>)
VS Code使用方法
- 打开搜索面板(快捷键:
Ctrl+F) - 点击搜索框右侧的
.*按钮,启用正则表达式模式 - 点击旁边的
↵按钮(或按Alt+Enter),启用匹配换行功能 - 将转换后的正则粘贴到搜索框,即可精准匹配
<TOTA>标签范围内所有length属性的值
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

