正则表达式创建

Regular expression creation

本文关键字:创建 正则表达式      更新时间:2023-09-26

我需要拆分一个字符串,但只能沿着最后一次出现的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() 粘合在一起?

为此使用 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)/

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

我认为你可以用原生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'));