代码之家  ›  专栏  ›  技术社区  ›  Steve Lam

在javascript中从列表键代码中拆分字符串

  •  3
  • Steve Lam  · 技术社区  · 7 年前

    我有一个代表分隔键的键码列表。在用户输入一个字符串(从一个文本框中)之后,我如何用一个键码列表来分割这个字符串?到目前为止split()函数是允许字符串或regexp的,我在将keyCode转换为regexp时没有发现任何东西。

    separators = [ 
        mdConstants.KEY_CODE.COMMA // 188
        mdConstants.KEY_CODE.DASH: // 189
        ...
    ]
    
    Input -> Output
    ------------------
    abc-def -> [ abc, def ]
    abc-def.efg -> [ abc, def, efg ]
    
    5 回复  |  直到 7 年前
        1
  •  2
  •   Russell    7 年前

    可以在拆分中使用正则表达式:

    // eg ,-
    var separators = [44, 45];
    var myText = "this, is a - test";
    
    var regex = "[" + separators.map(function (c) { return String.fromCharCode(c); }).join("") + "]"; 
    
    var groupedItems = myText.split(new RegExp(regex));
    console.log(groupedItems);
    
        2
  •  1
  •   Alex Kudryashev    7 年前

    可以使用 RegExp 对象来拆分字符串。

    //assuming an object is given
    const mdConstants = {
      "KEY_CODE": {
        "COMMA": ",",
        "DASH": "-",
        "DOT": "."
      }
    };
    
    //you can create separator list
    
    const separators = Object.keys(mdConstants.KEY_CODE).map(k => '[' + mdConstants.KEY_CODE[k] + ']'); //sanitize symbols to avoid RegExp special character conflicts
    
    //create RegExp object
    const re = new RegExp(separators.join('|'));
    
    //and use it
    
    console.log('abc-def.ghi,jkl'.split(re));
        3
  •  1
  •   i--    7 年前

    const separators = [ 
        ",",
        "-",
        "."
    ];
    
    // make regex pattern from your separators.
    // pipe serves as a char separator
    // double is backslash for escaping chars
    let pattern = new RegExp('\\' + separators.join('|\\'), "g");
    
    // user input
    let userInput = "abc-def.efg";
    
    // resulting array of words split by your separators
    let result = userInput.split(pattern);
    
    console.log(result);
    
        4
  •  0
  •   Mayank Shekhar    7 年前

    你可以听听 onKeyDown 事件,这将给你一个事件对象。你的函数可以是这样的。

    var tempWord = ""; var arrayYouWant = []; var separators = [];

    function onKeyDownHandler (event) {
        var value = event.target.value;
        var keyCode = event.which || event.keyCode;
        if (separators.indexOf(keyCode) === -1) {
            tempWord += value;
        } else {
            arrayYouWant.push(tempWord);
            tempWord = "";
        }
    }
    

        5
  •  0
  •   Daniel Vaca    7 年前

    您可以尝试用第一个分隔符替换所有分隔符,然后使用javascript的split函数和第一个分隔符进行拆分。

    var a = 'abc-def.efg';
    
    for (var i = 0; i<separators.length; i++){
        a = a.replace(separators[i],separators[0]);
    } 
    
    var a_split = a.split(separators[0]);
    
    console.log(a_split);