我需要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']*/
这是否可以在不将所有分隔符拆分的情况下进行分割,只将最后一个与join()粘合在一起?
答案 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'));