[英]Regex - match character only once - then ignore
我遇到了很多問題,無法解決我的問題。
我需要匹配多個特殊字符,但只能匹配一次。
HTML:
<form class="FillIn Rearrange">
<input data-correctanswer="ça" type="text">,
<input data-correctanswer="ça" type="text">
<input data-correctanswer="vé" type="text">
<input data-correctanswer="bién" type="text">
</form>
該JS當前返回ALLç和é,但我最多需要1個。 每個:
var buttons = '';
$('.FillIn input').each(function () {
var corrAns = $(this).attr('data-correctanswer');
for (var i = 0; i < corrAns.length; i++) {
if (corrAns[i].match(/[éç]/g)) {
buttons += '<button>' + corrAns[i] + '</button>';
}
}
});
當前返回ççéé(所有情況)
需要它返回çé(每個)。
需要一個可擴展的解決方案,即.match(/ [éçdfga] / g)(或任何其他字母)
看起來您想在獲得匹配項后立即結束for循環,因此請輸入break語句:
var buttons = '';
$('.FillIn input').each(function () {
var corrAns = $(this).attr('data-correctanswer');
for (var i = 0; i < corrAns.length; i++) {
if (corrAns[i].match(/[éç]/g)) {
buttons += '<button>' + corrAns[i] + '</button>';
break;
}
}
});
您只需要記住已經找到的內容而不進行處理:
var buttons = '';
var found = []; // this remembers what we have already found
$('.FillIn input').each(function () {
var corrAns = $(this).attr('data-correctanswer');
for (var i = 0; i < corrAns.length; i++) {
var m; // hold the match
if (m = corrAns[i].match(/[éç]/)) {
// not found yet
if(found.indexOf(m[0]) == -1) {
found.push(m[0]) // remember it's been found
buttons += '<button>' + corrAns[i] + '</button>';
}
}
}
});
您可以按照以下方法進行操作:
var buttons = ''; function createButtons(lettersToMatch){ $('.FillIn input').each(function () { var corrAns = $(this).attr('data-correctanswer'); for (var i = 0; i < corrAns.length; i++) { var match = corrAns[i].match(new RegExp(lettersToMatch)); if (match) { buttons += '<button>' + corrAns[i] + '</button>'; lettersToMatch = lettersToMatch.replace(match[0], ""); } } }); } //Testing createButtons("[éèçêïë]"); $("body").append( buttons );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form class="FillIn Rearrange"> <input data-correctanswer="çaï" type="text">, <input data-correctanswer="ça" type="text"> <input data-correctanswer="vé" type="text"> <input data-correctanswer="bién" type="text"> </form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.