Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中从列表键代码中拆分字符串_Javascript - Fatal编程技术网

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

在javascript中从列表键代码中拆分字符串,javascript,Javascript,我有一个代表分隔键的keyCode列表。在用户输入一个字符串(从文本框中)后,我如何用一个键码列表拆分该字符串?到目前为止,split()函数允许使用string或regexp,在将keyCode转换为regexp时,我没有发现任何东西 在这种情况下我该怎么办 例如: separators = [ mdConstants.KEY_CODE.COMMA // 188 mdConstants.KEY_CODE.DASH: // 189 ... ] Input ->

我有一个代表分隔键的keyCode列表。在用户输入一个字符串(从文本框中)后,我如何用一个键码列表拆分该字符串?到目前为止,split()函数允许使用string或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 ]

您可以在输入框上侦听
onKeyDown
事件,这将为您提供一个事件对象。您的函数可以如下所示

var tempWord=”“;
var arrayYouWant=[]
var分隔符=[]

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 = "";
    }
}

这是一个模糊的实现,但我希望您能理解。

不完全确定这是否是您想要的,但根据我对您的问题的理解,这里有一个存根:

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

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

// 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);
var a='abc def.efg';

对于(var i=0;i可以使用
RegExp
对象拆分字符串

//假设给定了一个对象
常数mdConstants={
“钥匙代码”:{
“逗号”:“,”,
“破折号”:“破折号”,
“点”:”
}
};
//您可以创建分隔符列表
常量分隔符=Object.keys(mdConstants.KEY_CODE).map(k=>'['+mdConstants.KEY_CODE[k]+']');//清理符号以避免正则表达式特殊字符冲突
//创建RegExp对象
const re=new RegExp(separators.join('|');
//并使用它

console.log('abc-def.ghi,jkl.split(re));
我刚刚更新了这个问题,请再仔细检查一下。密码和字符是两个完全不同的东西。尝试拆分字符串(这是一个字符列表)是没有意义的按键代码。您需要首先获取这些键代码对应的字符。@misorude我刚刚解决了它。谢谢您,muchI对该事件的访问权限有限,所以我无法处理它。谢谢您回答我。如果我使用var regex=“[”+this.separators.join(“+”)”;var tokens=chip.split(new RegExp(regex))是否有区别我找到了谢谢你的回答