我有一些使用split的函数,但我希望separator
是一个变量。 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
。如果不是这样,我可以硬编码它可以工作的一切。
编辑:
我不在乎它是否使用正则表达式。但它需要在separator
上拆分字符串,并确保修剪出额外空格的值。
另外,我在自动填充的jQuery UI页面here之后建模我的代码。
这是他们拥有的功能。我不知道他们为什么定义自己的split
。
function split( val ) {
return val.split( /,\s*/ );
}
答案 0 :(得分:1)
Concat字符串,并使用它来创建新RegExp
obj的实例。
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);
是的,该限制可以存储为变量并引用,但是您必须在要使用它的每个函数的整个范围内公开该变量。
如果您想要更改它,那么需要拆分一串字符串呢?
答案 1 :(得分:1)
您可以拆分字符串或正则表达式, 但不要混淆 -
var separator='|', val='Split | on | the | pipes';
val.split(RegExp('\\' + separator + '\\s*')).join('\n');
/* returned value: (String)
Split
on
the
pipes
*/
答案 2 :(得分:0)
请使用split()
,并且没有时间制作自己的功能
http://www.w3schools.com/jsref/jsref_split.asp
一个简单的例子
<p id="demo">Click the button to display the array values after the split.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
var str="How are you doing today?";
var n=str.split(" ");
document.getElementById("demo").innerHTML=n;
}
</script>
然后将模式放在split()
参数上。确保转义您将放在参数上的任何字符,因为split()
认为您输入了正则表达式。您的|
分隔符是正则表达式特殊字符,您必须使用反斜杠
答案 3 :(得分:0)
最好的方法是使用String.split,因为它可以通过使用字符串本身进行拆分。
但是,如果您希望探索RegEx,则需要确保在尝试拆分之前正确转义分隔符:
这是一个工作函数,其中separator可以是任何字符串:
function split(val, separator) {
var separator = separator.replace(/([^\w\s])/g, '\\$1');
return val.split(new RegExp(separator));
}
split("String|$Array|$Objects", "|$");
> Result ["String", "Array", "Objects"]