用提示/回调UI替换正则表达式

Regex replacement with prompting/callback UI

本文关键字:替换 正则表达式 UI 回调 提示      更新时间:2023-09-26

我正在尝试编写一个函数,该函数接受一长串文本,识别文本中的占位符,并提示用户提供应该取代占位符的值。占位符的标记看起来类似于用于图像或链接的标记:

some text, some more text, ?[name][description] more text, not just commas

其中namedescription是文本的任意运行。当我找到这些占位符时,我想要弹出一个格式良好的对话框,使用名称和描述,并让用户提供替换值。

我已经有了一个很好的函数(称为htmlPrompt),您可以在其中交给它一段HTML(用于提示的主要部分),有一个文本框,然后调用您提供的结果的回调函数(或null,如果按下取消),具有以下签名:

function (htmlText, inputStartValue, callback)

在插入此函数之前,我编写了大致的代码:

myText = myText.replace(/('?'[(.+)'][ ]?(?:'n[ ]*)?'[(.+)'])/g,
   function (wholematch, m1, m2, m3) {
  var repValue = prompt(m2);
  if (repValue == null)
  {
    return m1;
  }
  return repValue;
});

它使用DOM内置的prompt方法-当涉及到格式化时,它并没有真正为我做足够的工作。

然而,我想不出一种插入htmlPrompt的方法-它只有模拟一个模态对话框,并通过调用callback提供最终结果。

我确实想过尝试手动做替换,使用match而不是replace的结果-但据我所见,match返回的值只是字符串-它们不会给你任何有用的东西(例如在整个文本中匹配的位置)。

还是你认为我完全错了?我想要的整体流程是:
  • 查找文本
  • 中的每个占位符
  • 提示用户更换,使用namedescription
  • 用用户提供的值替换文本中的占位符表达式。

对于namedescription元组:

首先使用match读取namedesription。提示用户。然后使用replace替换这些