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

时间:2016-04-10 10:25:35

标签: javascript 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>

2 个答案:

答案 0 :(得分:1)

我想这没关系

text2.replace(/([^L]|\b)(am)/g, (m,n1,n2) => (n2=="am" && n1 +"M"));

虽然可能有一种更简单的方法。

答案 1 :(得分:1)

您可以使用以下正则表达式:

([^L]|^)am

...并将捕获的组保留在替换组中:

$1M

所以你的代码会变成:

&#13;
&#13;
$("#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);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ta_1" type="text">
&#13;
&#13;
&#13;