[英]Extract Variables From String Regex
这可能是一个重复的问题,但我不知道如何寻找答案:P 我正在尝试从字符串中提取和删除变量。
该字符串可能如下所示: !text (<123456789>=<@$111111111>) (<7654312> = <@$222222222>) (🛠 =<@$3333333333>) Some text that I will need!
我需要每个块中的两个项目? 例如[["123456789", 111111111],['7654312','222222222'],["🛠","3333333333"]]
然后我完全需要字符串但删除了变量? 例如Some more text that I will need!
我不确定这样做的最佳方法,任何帮助表示赞赏。
您不必总是使用正则表达式,例如为什么不编写解析器? 这为您提供了更大的灵活性。 请注意,为了简单起见,我在🛠
周围添加了<>
,但您可以在解析器中将括号🛠
可选。
解析器假定任何不在()
都是自由文本并将其捕获为字符串节点。
例如,如果你只想要最后一个文本节点,你可以做......
const endingText = parse(text).filter(t => typeof t === 'string').pop();
const text = '!text (<123456789>=<@$111111111>) (<7654312> = <@$222222222>) (<🛠> =<@$3333333333>) Some text that I will need!'; console.log(parse(text)); function parse(input) { let i = 0, char = input[i], text = []; const output = []; while (char) { if (char === '(') { if (text.length) output.push(text.join('')); output.push(entry()); text = []; } else { text.push(char); consume(); } } if (text.length) output.push(text.join('')); return output; function entry() { match('('); const key = value(); whitespace(); match('='); whitespace(); const val = value(); match(')'); return [key, val]; } function value() { const val = []; match('<'); while (char && char !== '>') val.push(char), consume(); match('>'); return val.join(''); } function whitespace() { while (/\\s/.test(char)) consume(); } function consume() { return char = input[++i]; } function match(expected) { if (char !== expected) throw new Error(`Expected '${expected}' at column ${i}.`); consume(); } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.