我有一个表单,用户可以在textarea中插入[Am],[D]等音乐和弦。用括号括起来的和弦字母。
我想阻止用户输入[H]的北欧式变体,并在表单提交时将其替换为英语[B]。
我如何设置一个像这样的替换函数:
[H] -> [B]
[Hm] -> [Bm]
[Hm7] -> [Bm7]
[h] -> [H]
[h7] -> [H7]
我应该足够全局替换支架内的H / h,并在同一支架内使用大写字母B.
你会推荐智能替换功能吗?
答案 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]
:匹配H
或h
(...)
捕获组:匹配内部的所有内容并将其存储以供日后使用
[^\]]
:匹配任何非]
*
:匹配最后一个字符零次或多次(零个或多个字符不是]
\]
:匹配文字]
/
:标记正则表达式的结尾(如"
关闭字符串)g
:全局修饰符。使正则表达式匹配输入中的每个出现,而不仅仅是第一个。要使用它,请在输入字符串上使用replace函数:
inputstring.replace(/\[[Hh]([^\]]*)\]/g, "[B$1]");
替换值中的$1
会在正则表达式中插入值捕获组。