我想用第一个匹配的regex覆盖第二个匹配的egex,但我的代码看到了第二个匹配的egex并删除了第一个(不记忆)。
例如:如果我键入"baslamak",它会打印"basLMak"并删除应该是…目标字符串的"a"(我想要的):baslamak
$(document).ready(function(){
$("#ta_1").keyup(function(event) {
var text2 = $(this).val();
text2 = text2.replace(/l(?=a)/g, "L");
text2 = text2.replace(/am/g, "M");
$("#ta_1").val(text2);
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<meta charset="utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<textarea id="ta_1" rows="5" cols="28" ></textarea>
</body>
</html>
您可以使用以下正则表达式:
([^L]|^)am
并将捕获的组保留在替换中:
$1M
所以你的代码会变成:
$("#ta_1").keyup(function(event) {
var text2 = $(this).val();
text2 = text2.replace(/l(?=a)/g, 'L');
text2 = text2.replace(/([^L]|^)am/g, '$1M');
$("#ta_1").val(text2);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ta_1" type="text">
我想这是可以的
text2.replace(/([^L]|b)(am)/g, (m,n1,n2) => (n2=="am" && n1 +"M"));
尽管可能有更简单的方法。