Я пытаюсь сделать быстрый и грязный тест шаблона, но когда регулярное выражение заменяет, оно заменяет только последнее вхождение, я думал, что \g
заменит все копии. но это соответствует только последнему вхождению.Regex global заменить не заменяет первое появление
(How to String.match() distinct it ${SOME_TEXT} using Regex)
То, что я пытаюсь сделать, это приглашение пользователю один раз для каждого уникального имени переменной.
Title = t
name = n
result = '${Title} - n - t'
Использование /\$\{([^\}]+)\}/g
работ, но побуждает МНОГОПОЛЬЗОВАТЕЛЬСКИЙ раз.
Title = t
name = n
Title = t
result = 't - n - t'
Так как я могу заменить каждый токен на одно значение независимо от того, сколько раз оно появляется.
<html>
<head>
<script type="application/javascript">
window.copyToClipboard = function(n) {
var u = "_hiddenCopyText_", t, i, r;
t = document.getElementById(u);
t.textContent = n;
i = document.activeElement;
t.focus();
t.setSelectionRange(0, t.value.length);
try {
r = document.execCommand("copy")
} catch (f) {
r = !1
}
return i && typeof i.focus == "function" && i.focus(),
t.textContent = "",
r
};
//${varname}
window.templateRegex = /\$\{([^\}]+)\}(?![\S\s]*\$\{\1\})/g;
window.test = " ${Title} - ${Name} - ${Title}"
window.copyTemplate = function (template) {
var result = template.replace(window.templateRegex, function(match, token){
return window.prompt("replace value for ${"+token+"}","${"+token+"}");
});
window.copyToClipboard(result);
};
</script>
</head>
<textarea id="_hiddenCopyText_"></textarea>
<button onclick="copyTemplate(window.test)">Test</button>
</html>
JsFiddlehttps://jsfiddle.net/ksu37c3b/
Это подсказка 3 раза, а не дважды. –
@ Ryan The Leach Я обновил свой ответ, код выше подсказок 2 раза. –