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

标签 javascript pattern-matching

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

相关文章:

string - PostgreSQL : Find the string with the closest substring match

language-agnostic - 任何用于模式匹配和重写源代码的软件?

java - 通过正则表达式过滤日志文件

javascript - amcharts 在 Android web View 中不显示主题背景

正则表达式 url block 指定的词和优化

swift - 是否可以使用 'if-case' 代替具有逗号分隔列表的开关?

javascript - 无法看到下拉框中的值

javascript - CORS Angular JS

javascript - 如何取消选择jquery中的所有元素?

javascript - 如何在 React-Native 应用程序中处理对 Firebase 的异步调用?