Javascript 正则表达式创建

Javascript 正则表达式创建,javascript,regex,Javascript,Regex,我需要创建一个字符串,但只能沿着上次出现的分隔符(可能会出现很多次),我可以这样做(见下文),但我想动态创建它(比如,从用户输入),而不是硬编码 例如: var separator= /abc/; var stringToSplit = 'ONEabc123TWO45THREEabc67FOUR'; var result = stringToSplit.split(/(\abc)(?!.*\abc)/); /*['ONEabc123TWO45THREE', 'abc', '67FOUR']*

我需要创建一个字符串,但只能沿着上次出现的
分隔符
(可能会出现很多次),我可以这样做(见下文),但我想动态创建它(比如,从用户输入),而不是硬编码

例如:

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']*/

这是否可能,而不需要沿着所有分隔符将其拆分,只需将除最后一个之外的所有内容粘在一起?

您使用构造函数来实现这一点

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

请记住,如果您正在编写字符串文字,则需要避开反斜杠,否则它们将在解释时消失。

我认为您可以使用本机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'));

你为什么要逃离
a
?谢谢!但是,是否可以使用
/abc/
作为参数而不是
'abc'
?我可以解决这个问题,但前者会使我的代码更加一致。@k您也可以这样做,但仍然需要创建一个新的RegExp实例,这样就不会节省太多。通过访问
re.source
,可以将RegExp的底层模式作为字符串获取;我将在
19
中编辑它,它应该是
索引
?不过我还是还是喜欢正则表达式,谢谢。