我使用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;
答案 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
未跟随1
或2
使用
.replace(/1(?![12])/g,"2")
^^^^^^^^
下面,
1
- 匹配1
(?![12])
- 否定前瞻断言1
或2
未立即跟踪的位置。请参阅regex demo。