我正在尝试使用正则表达式在React.js中编写一个简单的文本替换程序,但是我无法将其包围。使用正则表达式从列表中替换带有标记的标记
所以我有一个令牌列表及其相应的替换文本。我还有一个由用户编写文本的文本区域。每当一个单词缠绕{}时,文本将被替换为相应令牌的替换文本。
例如,如果我在textarea的某处有一个{example},我将不得不检查我的标记列表并查看列表中是否有值示例,并用列表的替换值的值替换{example} 。
我在做什么,现在是检查是否使用我有我的textarea的任何比赛:
let regEx = /\{[a-zA-Z_][a-zA-Z0-9_]*\}/;
inputText.match(regEx);
结果我发现了一个指数和投入,但我怎能取代匹配文字与替换文字?我尝试使用替换功能,但不知何故,我不明白如何使用它。
这里是我的过滤功能,为您检查出:
this.filterText =() => {
//check if we have text in Input text area
if (this.state.inputText) {
let regEx = /\{[a-zA-Z_][a-zA-Z0-9_]*\}/;
let inputText = this.state.inputText;
this.state.data.forEach((token, index) => {
let match = inputText.match(regEx);
if (match) {
console.log('match:', match);
//should replace matched text with replacement text
inputText.replace(regEx, this.state.data[index].replacementText);
}
});
}
}
我喜欢你的解决方案,有一些调整,我可以让我自己的例子工作。我有一个问题,但我的正则表达式与你的有什么区别?使这个例子也能递归地工作会难吗?如果我在替换文本中有{test},那么我将再次解析它,并检查测试是否在令牌列表中并将其替换为文本。谢谢 – captain
完成!我认为它涵盖了你的需求。 –
关于你的正则表达式,我只是在大括号之间匹配任何东西,但是如果你只需要匹配字母,数字或下划线,那么你可以像这样简化你:'{[\ w] * \}'。 '\ w'匹配任何字母,数字或下划线。相当于[a-zA-Z0-9_]。大括号不需要被转义。 –