用第一个匹配的正则表达式覆盖第二个匹配的regex



我想用第一个匹配的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"));

尽管可能有更简单的方法。

最新更新