正则表达式创建

时间:2014-04-04 12:08:16

标签: javascript regex

我需要split一个字符串,但只能在separator的最后一次出现(可能会多次出现),我可以这样做(见下文),但我想要即时创建(例如,用户输入),而不是硬编码。

例如:

var separator= /abc/;
var stringToSplit = 'ONEabc123TWO45THREEabc67FOUR';
var result = stringToSplit.split(/(\abc)(?!.*\abc)/);
 /*['ONEabc123TWO45THREE', 'abc',  '67FOUR']*/

相反,我想这样做:

function make(sep){
     ...magic happens here...
     return superSeparator;
}
var separator = make(/abc/);
var stringToSplit = 'ONEabc123TWO45THREEabc67FOUR';
var result = stringToSplit.split(separator );
/*['ONEabc123TWO45THREE', 'abc',  '67FOUR']*/

JSfiddle

这是否可以在不将所有分隔符拆分的情况下进行分割,只将最后一个与join()粘合在一起?

2 个答案:

答案 0 :(得分:2)

您使用RegExp构造函数来实现此

var re = new RegExp(pattern, flags);

所以,例如,

function makeMySeparator(pattern) {
    if (pattern instanceof RegExp) // if input is a RegExp already
        pattern = pattern.source;  // get the string of it's pattern
    return new RegExp('(' + pattern + ')(?!.*' + pattern + ')');
}

makeMySeparator('\\abc'); // /(\abc)(?!.*\abc)/

请记住,如果您正在编写 String 文字,则需要转义反斜杠,否则它们会在解释时消失。

答案 1 :(得分:0)

我认为你可以用原生js做到这一点:

function splitOnLastSeparator(separatorToSplit, separator) {
    var length = separatorToSplit.length,
    index = separatorToSplit.lastIndexOf(separator);
    var arr = [];
    arr.push(separatorToSplit.substr(0, index));
    arr.push(separator);
    arr.push(separatorToSplit.substr(index + separator.length, length));
    return arr;
}
console.log(splitOnLastSeparator('ONEabc123TWO45THREEabc67FOUR', 'abc'));