1

検索テキストの始まりに基づいて、変数を特定の値に設定したいと思います。

私が現在持っているもの:

var action;

switch (searchText.substr(0, 3).toUpperCase()) {

    case 'ABC':
        action = 'foo';
    break;

    case 'CDE':
        action = 'bar';
    break;

}

これは機能します。ABCしかし、テキストがで始まるかどうかをチェックするだけでなく、 ABC+ のように少なくとも 2 つの数字になるように拡張したいと思いABC12ます。それに対して検証するスイッチケース内で正規表現を作成するにはどうすればよいですか?

4

2 に答える 2

5

switch(true)と組み合わせて使用​​することにより、switch ステートメントに正規表現を埋め込むことができますregex.test

switch(true) {

    case /^ABC\d\d/g.test(searchText):
        action = 'foo';
    break;

    case /^XYZ$/.test(searchText):
        action = 'bar';
    break;
}

私は個人的にテーブル駆動型のアプローチを好みますが:

function firstMatch(text, mapping) {
    for(var i = 0; i < mapping.length; i++)
        if(mapping[i][0].test(text))
            return mapping[i][1];
}

actions = [
    [/^ABC\d\d/g, 'foo'],
    [/^XYZ\d\d/g, 'bar'],
]


action = firstMatch(searchText, actions)
于 2013-04-30T08:08:11.833 に答える
2
searchText.toUpperCase().match(/^ABC\d{2,}$/)

文字列が で始まり、少なくとも 2 桁の数字を含むnull場合、not を返します。ABC

于 2013-04-30T07:53:10.860 に答える