Javascript - 如何使用变量分隔符进行拆分功能?

时间:2012-12-21 05:01:46

标签: javascript pattern-matching

我有一些使用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*/ );
}

4 个答案:

答案 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"]