正则表达式在匹配后立即替换字符

时间:2018-05-04 13:05:04

标签: javascript regex

问题

我使用Regex替换给定html()字符串中所有出现的数字1。但是,我不想让它取代12中的1。我这样做是为了让克隆表单的某些部分更容易。

到目前为止,它有效。但是,它也会在比赛结束后立即替换角色。例如,我尝试将name[1]中的1替换为name[2] - 然而,它最终为name[2。请参阅下面的代码段;

note - 片段的奇怪问题。复制元素后,整个事物就消失了。同样的事情发生在JSfiddle上,但不是本地的。



$("form").on("click", ".add-race", function(){
    var row = $(".add-race-row").first(); // use this to clone the section
    var newRow = row.clone();
    newRow.html(newRow.html().replace(/1[^12]/g,"2"));

    console.log("clicked!");

    $(".add-race-row").last().after(newRow);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
  <div class="row add-race-row">
        <div class="col-12">
             <input name="races[1][name]" class="form-control">
        </div>
        <div class="col-12"> 
             <button class="add-race">Add Race</button>
        </div>
  </div>
</form>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

您可以使用正向前瞻:1(?=[^12])

使用您的初始RegEx,您将替换整个匹配:1以及之后的任何内容。

在此,我只检查1之后的内容是1还是2。我不符合它。

$(".add-race").on("click", function() {
  var row = $(".add-race-row").first(); // use this to clone the section
  var newRow = row.clone();
  newRow.html(newRow.html().replace(/1(?=[^12])/g, "2"));

  console.log("clicked!");

  $(".add-race-row").last().after(newRow);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="row add-race-row">
  <div class="col-12">
    <input name="races[1][name]" class="form-control">
  </div>
  <div class="col-12">
    <button class="add-race">Add Race</button>
  </div>
</div>

答案 1 :(得分:2)

为了匹配1未跟随12使用

.replace(/1(?![12])/g,"2")
           ^^^^^^^^ 

下面,

  • 1 - 匹配1
  • (?![12]) - 否定前瞻断言12未立即跟踪的位置。

请参阅regex demo