var textt = "L'architecture du système d'information devient";
var pattern = "/(ARCH)/gi";
var array = textt.split(pattern);
console.log(array)
这会导致:
[
L',
itecture du système d'information devient
]
预期结果是:
[
L',
arch,
itecture du système d'information devien
]
另一个例子
var textt = "ARCHIMAG";
var pattern = "/(ARCH)/gi";
var array = textt.split(pattern);
console.log(array)
结果:
[
IMAG
]
预期是:
[
ARCH,
IMAG
]
最佳答案
如果您可以进行功能测试并使用功能来替换非捕获拆分,请尝试以下操作。它在加载脚本时测试支持情况,并为 nonCaptureSplit 分配适当的函数,因此测试仅进行一次。
如果您使用字母字符或数字以外的任何内容(例如,如果字符串中有标点符号),则需要对模式进行转义。
已编辑
如果缺乏对非捕获分割的支持,现在会进行完全手动分割。
// Do case insensitive, non-capture split
var nonCaptureSplit = (function() {
// Feature test for non-capturing split
if ( 'ab'.split(/(a)/).length == 3) {
return function (str, pattern) {
var re = new RegExp('(' + pattern + ')','i');
return str.split(re);
};
// Otherise, do it with a function
} else {
return function(str, pattern) {
// Do case insensitive split
var result = [];
var ts = str.toLowerCase(); // copy of string in lower case
var tp = pattern.toLowerCase();
var first = true;
while (ts.indexOf(tp) != -1) {
var i = ts.indexOf(tp);
// If first match is at the start, insert empty string + pattern
// Trim pattern from front of temp strings
if (i == 0 && first) {
result.push('', pattern);
ts = ts.substring(tp.length);
str = str.substring(tp.length);
// If match is at the end, append pattern and ''
// Set temp string to '' (i.e. finished)
} else if (i == ts.length - tp.length) {
result.push(str.substr(0,i), pattern);
ts = '';
str = '';
// Otherwise, append the next unmatched part
// and pattern
} else {
result.push(str.substring(0,i), pattern);
ts = ts.substring(i + pattern.length);
str = str.substring(i + pattern.length);
}
first = false;
}
// Append remainder of string or '' if used, i.e. last match
// must have been at end of string
result.push( ts.length? str : '');
return result;
};
}
}());
测试:
alert(nonCaptureSplit('wa', 'wa')); // ,wa,
alert(nonCaptureSplit('qwqwaba', 'wa')); // qwq,wa,ba
alert(nonCaptureSplit('qwqwaba', 'qw')); // ,qw,,qw,aba
alert(nonCaptureSplit('qwqwaba', 'ba')); // qwqwa,ba,
alert(nonCaptureSplit('baaqwqbawaba', 'ba')); // ,ba,aqwq,ba,wa,ba,
alert(nonCaptureSplit("L'architecture du système d'information devient", "ARCH"));
// L',arch,itecture du système d'information devient
alert(nonCaptureSplit("ARCHIMAG", "ARCH")); // ,ARCH,IMAG
对于具有大量匹配的大字符串来说,这可能有点低效,但仅限于不支持非捕获拆分的浏览器。测试结果在 Safari 和 IE 6 中匹配。请彻底测试,如果有问题请告诉我。
哦,这不是一个通用的解决方案,但它应该适用于类似于OP的有限情况。
关于javascript - 如何在旧版 IE 中使用 String.split 捕获组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342156/