我想寫一個函數,需要一長串文本,標識文本中的佔位符,並提示用戶提供一個值代替佔位符。對於佔位符的標記看起來類似於用於圖片或鏈接降價:用提示/回調UI的正則表達式替換
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;
});
其採用內置prompt
的DOM甲基od - 在格式化方面,這對我來說確實沒有足夠的工作。
不過,我想不出在htmlPrompt
堵的方式 - 它只是模擬一個模式對話框,並通過調用callback
提供了最終的結果。
我也想嘗試做手工的替代品,使用從match
而不是replace
結果 - 但到目前爲止,我所看到的,通過match
返回的值僅僅是字符串 - 他們不給你任何有用的東西(如整個文本中的匹配位置)。
或者你認爲我對此完全錯誤?整個流程我想要的是:
- 找到每個佔位符的文本
- 提示用戶進行更換,同時使用
name
和description
值 - 與提供用戶的文本替換佔位符表達式值。
爲什麼不能修改htmlPrompt,以便返回輸入而不是調用回調函數? – palindrom 2013-03-04 13:24:10
@palindrom - 因爲它基於模擬模式對話框的模型 - 通過在包含對話框UI的'div'後面放置一個不可編輯的窗口大小的'div',然後退出所有當前正在運行的用戶javascript並讓正常的瀏覽器事件循環運行 - 這在javascript下是相當標準的。 – 2013-03-04 13:33:51