我正在尝试编写一个函数,该函数接受一长串文本,标识文本中的占位符,并提示用户提供一个应该代替占位符的值。占位符的标记看起来类似于用于图像或链接的标记:
some text, some more text, ?[name][description] more text, not just commas
其中name
和description
是任意的文本。当我找到这些占位符时,我想弹出一个格式良好的对话框,使用名称和描述,并让用户提供替换值。
我已经有一个很好的函数(称为 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
- 但据我所知, 返回的值code>match
只是字符串 - 它们不会为您提供任何有用的信息(例如整个文本中匹配的位置)。
或者你认为我的做法完全错误吗?我想要的总体流程是:
- 查找文本中的每个占位符
- 使用
名称
和描述
值提示用户进行替换 - 将文本中的占位符表达式替换为用户提供的值。
最佳答案
对于每个 name
和 description
元组:
首先使用match
读取name
和desription
。
用户提示。
然后使用 replace
来替换它们。
关于javascript - 使用提示/回调 UI 替换正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15202288/