0

我有一些使用 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

我认为这与拆分功能有关。我怎样才能让它工作?请注意,我认为我需要这样做的唯一原因是因为我希望能够轻松更改separator. 如果不是这样,我可以硬编码所有可以工作的东西。

编辑:我不在乎它是否使用正则表达式。但它需要拆分字符串separator并确保值被修剪掉额外的空格。

另外,我在 jQuery UI 页面之后为我的代码建模以进行自动完成,这里。这是他们拥有的功能。我不知道他们为什么定义自己的split.

function split( val ) {
     return val.split( /,\s*/ );
}
4

4 回答 4

1

连接字符串,并使用它来创建新RegExpobj 的实例。

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

是的,该限制可以存储为变量并被引用,但是您必须在要使用它的每个函数的范围内公开该变量。

如果你想改变它,让它需要一个字符串数组来拆分呢?

于 2012-12-21T05:17:28.160 回答
1

您可以在字符串或正则表达式上拆分,但不要将它们混合在一起-

var separator='|', val='Split | on | the | pipes';
val.split(RegExp('\\' + separator + '\\s*')).join('\n');



/*  returned value: (String)
Split 
on 
the 
pipes
*/
于 2012-12-21T05:34:22.610 回答
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()认为您输入了正则表达式。您的|分隔符是一个正则表达式特殊字符,您必须使用反斜杠对其进行转义

于 2012-12-21T05:06:22.607 回答
0

最好的方法是只使用String.split因为它可以通过使用字符串本身进行拆分。

但是,当您希望探索 RegEx 时,您需要确保在尝试拆分之前正确转义分隔符:

这是一个工作函数,其中分隔符可以是任何字符串:

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"]
于 2012-12-21T06:01:27.907 回答