Разделить строку из списка keycode в javascript

У меня есть список keyCode, который обозначает ключи-разделители. После того, как пользователь вводит строку (из текстового поля), как я могу разбить эту строку по списку keyCode? Пока что функция split () допускает строковое или регулярное выражение, я ничего не нашел при преобразовании keyCode в регулярное выражение.

Что мне делать в этом случае?

Например:

separators = [ 
    mdConstants.KEY_CODE.COMMA // 188
    mdConstants.KEY_CODE.DASH: // 189
    ...
]

Input -> Output
------------------
abc-def -> [ abc, def ]
abc-def.efg -> [ abc, def, efg ]

Я только что обновил вопрос, пожалуйста, проверьте еще раз

Steve Lam 26.10.2018 05:32

Коды клавиш и символы - это разные вещи. Нет смысла даже пытаться разбить строку (которая представляет собой список символов) по кодам клавиш. Сначала вам нужно получить символы, которым соответствуют эти коды клавиш.

misorude 26.10.2018 08:59

@misorude Я только что понял. Большое спасибо

Steve Lam 26.10.2018 09:48
3
3
415
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете прослушивать событие 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 = "";
    }
}

Это расплывчатая реализация, но я надеюсь, что вы уловили идею.

У меня ограниченный доступ к этому событию, поэтому я не могу с ним справиться

Steve Lam 26.10.2018 09:49

Не совсем уверен, что вы этого хотите, но вот заглушка с моим пониманием вашего вопроса:

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

Спасибо, что ответили мне. Будет ли это по-другому, если я использую var regex = "[" + this. separators.join ("") + "]"; var tokens = chip.split (новое регулярное выражение (регулярное выражение)); комментария Рассела

Steve Lam 26.10.2018 11:09

Нашел developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…

Steve Lam 26.10.2018 11:15
Ответ принят как подходящий

Вы можете использовать регулярные выражения в split:

// 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);

Вы можете попробовать заменить все разделители первым разделителем, а затем выполнить разделение с помощью функции разделения javascript и первого разделителя.

Вот пример:

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

Можно использовать объект 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));

Другие вопросы по теме