我正在尝试替换此代码中的多个字符,但显然它不起作用的字符是:
A>>中号
M>>甲
如您所见A必须更改为M且M必须更改为A,依此类推为其他
<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
var text = $("textarea").val();
text=text.replace(/A/g,'M');
text=text.replace(/[M_]/g,'A');
text=text.replace(/[T_]/g,'T');
text=text.replace(/[R_]/g,'E');
text=text.replace(/[I_]/g,'I');
text=text.replace(/[O_]/g,'R');
text=text.replace(/[V_]/g,'V');
text=text.replace(/[P_]/g,'O');
text=text.replace(/[U_]/g,'U');
text=text.replace(/[Z_]/g,'P');
text=text.replace(/[S_]/g,'S');
text=text.replace(/[X_]/g,'Z');
text=text.replace(/[K_]/g,'K');
text=text.replace(/[W_]/g,'X');
text=text.replace(/[Q_]/g,'Q');
text=text.replace(/[a_]/g,'m');
text=text.replace(/[m_]/g,'a');
text=text.replace(/[e_]/g,'t');
text=text.replace(/[t_]/g,'e');
text=text.replace(/[r_]/g,'i');
text=text.replace(/[i_]/g,'r');
text=text.replace(/[o_]/g,'v');
text=text.replace(/[v_]/g,'o');
text=text.replace(/[p_]/g,'u');
text=text.replace(/[u_]/g,'p');
text=text.replace(/[z_]/g,'s');
text=text.replace(/[s_]/g,'z');
text=text.replace(/[x_]/g,'k');
text=text.replace(/[k_]/g,'x');
text=text.replace(/[w_]/g,'q');
text=text.replace(/[q_]/g,'w');
text=text.replace(/[=_]/g,'/');
text=text.replace(/[@_]/g,'+');
text=text.replace(/[+_]/g,'@');
$('p').html(text);
});
});
</script>
</head>
<body>
<textarea name="paragraph_text" cols="50" rows="10"></textarea>
<br>
<button text="fsd">click me</button>
<p></p>
<html>
` 你能告诉我什么是问题,当我点击按钮时,只有一两个字符被替换,
答案 0 :(得分:0)
正如评论中提到的,当你有这样的代码时:
text=text.replace(/A/g,'M');
text=text.replace(/[M_]/g,'A');
...您首先将A更改为M,然后立即再将其更改回来。此外,这会将所有下划线字符更改为A,这意味着在[T_]
和[R_]
等正则表达式中具有下划线的所有以下行都是多余的,因为没有下划线留给找到。
还有这样的行:
text=text.replace(/[V_]/g,'V');
...根本不做任何事情,因为替换是您匹配的相同角色(如前所述,此时不会留下任何下划线)。
我建议对整个事情采用不同的方法。您可以使用包含要替换的所有字符的正则表达式对.replace()
进行一次调用,然后在.replace()
的第二个参数中提供替换字符串,而不是基于查找表进行替换的回调函数,可能有点像这样:
$(document).ready(function() {
var regex = /[_AMTRIOVPUZSXKWQametriovpuzsxkwq=@+]/g;
var replacements = { '_': 'M', 'A': 'M', 'M': 'A', 'T': 'T', 'R': 'E', 'I': 'I', 'O': 'R', 'V': 'V', 'P': 'O', 'U': 'U', 'Z': 'P', 'S': 'S', 'X': 'Z', 'K': 'K', 'W': 'X', 'Q': 'Q', 'a': 'm', 'm': 'a', 'e': 't', 't': 'e', 'r': 'i', 'i': 'r', 'o': 'v', 'v': 'o', 'p': 'u', 'u': 'p', 'z': 's', 's': 'z', 'x': 'k', 'k': 'x', 'w': 'q', 'q': 'w', '=': '/', '@': '+', '+': '@' };
$("button").click(function() {
var text = $("textarea").val();
text = text.replace(regex, function(match) { return replacements[match]; });
$('p').html(text);
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<textarea name="paragraph_text" cols="50" rows="10"></textarea>
<br>
<button text="fsd">click me</button>
<p></p>
&#13;
如果不明显,每次匹配时会调用一次回调函数,并将匹配的文本作为参数,并且该匹配的替换值是回调函数返回的值。