在提交时将[X]替换为texarea中的[Y]

时间:2016-10-15 20:35:40

标签: javascript jquery replace

我有一个表单,用户可以在textarea中插入[Am],[D]等音乐和弦。用括号括起来的和弦字母。

我想阻止用户输入[H]的北欧式变体,并在表单提交时将其替换为英语[B]。

我如何设置一个像这样的替换函数:

[H] -> [B]
[Hm] -> [Bm]
[Hm7] -> [Bm7]
[h] -> [H]
[h7] -> [H7]

我应该足够全局替换支架内的H / h,并在同一支架内使用大写字母B.

你会推荐智能替换功能吗?

2 个答案:

答案 0 :(得分:0)

您可以使用此replace()来电:

.replace(/\[H(.*?)\]/gi, '[B$1]')

段:

document.forms[0].onsubmit = function() {
    var txt = document.querySelector('textarea');
    txt.textContent = txt.textContent.replace(/\[H(.*?)\]/gi, '[B$1]');
}
<form action="#">
  <textarea>test [H] and [H7m], but also [h] and [h7].</textarea>
  <input type="submit" value="Submit">
</form>

答案 1 :(得分:0)

您正在寻找的是一个正则表达式 - 正则表达式的缩写。它允许您搜索(和替换)模式,而不仅仅是文字字符串。

要匹配H和弦,您可以使用/\[[Hh]([^\]]*)\]/g。这意味着:

  • /:标记正则表达式的开头(如"表示字符串的开头)
  • \[:匹配文字[
  • [Hh]:匹配Hh
  • (...)捕获组:匹配内部的所有内容并将其存储以供日后使用
    • [^\]]:匹配任何非]
    • 的内容
    • *:匹配最后一个字符零次或多次(零个或多个字符不是]
  • \]:匹配文字]
  • /:标记正则表达式的结尾(如"关闭字符串)
  • g:全局修饰符。使正则表达式匹配输入中的每个出现,而不仅仅是第一个。

Demo

要使用它,请在输入字符串上使用replace函数:

inputstring.replace(/\[[Hh]([^\]]*)\]/g, "[B$1]");

替换值中的$1会在正则表达式中插入值捕获组。