正则表达式 - 只匹配一次字符 - 然后忽略

时间:2015-08-05 17:04:49

标签: javascript jquery regex

我经历了很多问题而无法解决我的问题。

我需要匹配一些特殊字符,但只需匹配一次。

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>';
                }
            }
        });

fiddle

目前返回ççéé(所有出现次数)

需要它返回çé(每个之一)。

需要可扩展的解决方案,即.match(/ [éçdfga] / g)(或任何额外的字母)

3 个答案:

答案 0 :(得分:1)

看起来你想在得到一个匹配后立即结束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;
                }
            }
        });

答案 1 :(得分:1)

您只需要记住已经找到的内容而不是处理它:

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>';
            }
        }
    }
});

答案 2 :(得分:1)

以下是您可以这样做的方法:

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>