求助:CoffeeScript环境下如何用正则提取#包裹的纯内容
解决CoffeeScript中正则提取目标文本的问题
嘿,我来帮你搞定这个正则提取的难题!你需要从// # DECLARE SESSION VALUES #里精准提取DECLARE SESSION VALUES,排除前后的//、#这些符号,之前的方案要么报错要么带多余符号,试试这两个靠谱的方法:
方法1:使用捕获组(兼容性强,推荐)
这个方法不依赖ES6+的新特性,在CoffeeScript里肯定能正常运行,核心是用括号把目标内容捕获出来:
# 你的输入文本 inputStr = "// # DECLARE SESSION VALUES #" # 正则匹配:匹配开头的// #,捕获中间非#的内容,再匹配结尾的# regex = /\/\/ # ([^#]+) #/ # 执行匹配 matchResult = inputStr.match(regex) if matchResult # 捕获组索引1就是我们要的内容,trim()可以去除可能的首尾空格 targetText = matchResult[1].trim() console.log(targetText) # 输出:DECLARE SESSION VALUES
正则说明:
\/\/:转义匹配//(因为/是正则的分隔符,必须转义)#:匹配空格+#+空格的固定前缀([^#]+):捕获所有非#的字符,正好对应中间的目标文本#:匹配结尾的#(前面的空格可根据实际文本调整)
方法2:使用正向/反向预查(需环境支持ES2018+)
如果你的CoffeeScript运行环境支持ES2018的lookbehind(反向预查),可以用这个更简洁的写法,直接匹配中间内容不需要捕获组:
inputStr = "// # DECLARE SESSION VALUES #" # 反向预查匹配前面的// #,正向预查匹配后面的 # regex = /(?<=\/\/ # ).*(?= #)/ matchResult = inputStr.match(regex) if matchResult targetText = matchResult[0].trim() console.log(targetText) # 输出:DECLARE SESSION VALUES
为什么之前用预查会报错?
大概率是你的运行环境不支持ES2018引入的反向预查((?<=...)),CoffeeScript本身不限制,但如果编译后运行在旧版Node.js或浏览器里,就会报错。这时候方法1的捕获组方案就更稳妥。
内容的提问来源于stack exchange,提问作者Aj_Uthaya
相关产品推荐
相关产品推荐

