我有一些使用 split 的函数,但我希望分隔符是一个变量。 separator
将在多个地方使用,最好只需要更改变量一次,而不是到处更改硬代码。
但是,当然,这是行不通的。该模式看起来是正确的,但是 split
肯定在定义拆分的变量方面存在一些问题。
这是我在 Google Chrome 控制台中进行的一些测试。
separator = '|'; // separator to use
var pattern = '/\\' + separator + '\\s*/'; // define pattern
undefined
pattern;
"/\|\s*/"
// pattern is correct
// now define function with constant... variable version commented:
function split( val ) {
//var pattern = '/\\' + separator + '\\s*/';
return val.split( /\|\s*/ );
//return val.split( pattern );
}
undefined
split('asdf|jkl');
["asdf", "jkl"]
// function worked as expected
// now uncomment the variable portions:
function split( val ) {
var pattern = '/\\' + separator + '\\s*/';
//return val.split( /\|\s*/ );
return val.split( pattern );
}
undefined
split('asdf|jkl');
["asdf|jkl"]
// not as expected. string is not split into array
我认为这与 split 函数有关。我该如何让它发挥作用?请注意,我认为我需要这样做的唯一原因是因为我希望能够轻松更改分隔符
。如果不是这样,我可以对它能工作的所有内容进行硬编码。
编辑:
我不在乎它是否使用正则表达式。但它需要在 separator
上分割字符串,并确保值被 trim 掉多余的空格。
另外,我正在 jQuery UI 页面之后对代码进行建模以实现自动完成,here 。
这是他们拥有的功能。我不知道他们为什么要定义自己的split
。
function split( val ) {
return val.split( /,\s*/ );
}
最佳答案
连接字符串,并使用它创建新的 RegExp
对象的实例。
function split( val ) {
var pattern = new RegExp('\\' + separator + '\\s*');
return val.split( pattern );
}
编辑
请注意,在这个特定示例中,String.prototype.split() 似乎没有任何值。
如果您想为某种类型的所有拆分设置限制,这会更有用:
function split( val ) {
var pattern = new RegExp('\\' + separator + '\\s*');
return val.split( pattern , 3);
}
无需编写:
strVar.split(pattern, 3);
是的,该限制可以存储为变量并引用,但是您必须在要使用该变量的每个函数的范围内公开该变量。
如果您想更改它,以便需要分割字符串数组,该怎么办?
关于Javascript - 如何使用变量分隔符进行分割功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984527/