我有一个字符串:
var string = "aaaaaa<br />† bbbb<br />‡ cccc"
我想用分隔符<br />拆分这个字符串,后面跟着一个特殊字符。
要做到这一点,我使用这个:
string.split(/<br \/>&#?[a-zA-Z0-9]+;/g);
我得到了我需要的东西,只是我丢失了分隔符。 示例如下:http://jsfiddle.net/JwrZ6/1/
如何保留分隔符?
我有一个字符串:
var string = "aaaaaa<br />† bbbb<br />‡ cccc"
我想用分隔符<br />拆分这个字符串,后面跟着一个特殊字符。
要做到这一点,我使用这个:
string.split(/<br \/>&#?[a-zA-Z0-9]+;/g);
我得到了我需要的东西,只是我丢失了分隔符。 示例如下:http://jsfiddle.net/JwrZ6/1/
如何保留分隔符?
当前回答
我一直在用这个:
String.prototype.splitBy = function (delimiter) {
var
delimiterPATTERN = '(' + delimiter + ')',
delimiterRE = new RegExp(delimiterPATTERN, 'g');
return this.split(delimiterRE).reduce((chunks, item) => {
if (item.match(delimiterRE)){
chunks.push(item)
} else {
chunks[chunks.length - 1] += item
};
return chunks
}, [])
}
除了你不该惹斯特恩。这是一个函数版本:
var splitBy = function (text, delimiter) {
var
delimiterPATTERN = '(' + delimiter + ')',
delimiterRE = new RegExp(delimiterPATTERN, 'g');
return text.split(delimiterRE).reduce(function(chunks, item){
if (item.match(delimiterRE)){
chunks.push(item)
} else {
chunks[chunks.length - 1] += item
};
return chunks
}, [])
}
你可以这样做:
var haystack = "aaaaaa<br />† bbbb<br />‡ cccc"
var needle = '<br \/>&#?[a-zA-Z0-9]+;';
var result = splitBy(haystack , needle)
console.log( JSON.stringify( result, null, 2) )
你会得到:
[
"<br />† bbbb",
"<br />‡ cccc"
]
其他回答
Most of the existing answers predate the introduction of lookbehind assertions in JavaScript in 2018. You didn't specify how you wanted the delimiters to be included in the result. One typical use case would be sentences delimited by punctuation ([.?!]), where one would want the delimiters to be included at the ends of the resulting strings. This corresponds to the fourth case in the accepted answer, but as noted there, that solution only works for single characters. Arbitrary strings with the delimiters appended at the end can be formed with a lookbehind assertion:
'It is. Is it? It is!'.split(/(?<=[.?!])/)
/* [ 'It is.', ' Is it?', ' It is!' ] */
回答它这里也JavaScript分割正则表达式保持分隔符
在正则表达式中使用(?=pattern)前向模式 例子
var string = '500x500-11*90~1+1';
string = string.replace(/(?=[$-/:-?{-~!"^_`\[\]])/gi, ",");
string = string.split(",");
这将得到以下结果。
[ '500x500', '-11', '*90', '~1', '+1' ]
还可以直接拆分吗
string = string.split(/(?=[$-/:-?{-~!"^_`\[\]])/gi);
给出相同的结果
[ '500x500', '-11', '*90', '~1', '+1' ]
我知道这有点晚了,但你也可以使用搜索
Var string = "aaaaaa<br />†bbbb < br / >匕首;预备”; Var数组= string.split(/(?< = < br \ / >) /); console.log(数组);
使用(正)前向,这样正则表达式就断言特殊字符存在,但实际上并不匹配它:
string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);
看看它的实际应用:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _bbbb < br / > ‡亿”; 游戏机log(管柱。斯普利特(/ < br \/>(?=&#?[ a-zA-Z0-9] +) / (g));
我一直在用这个:
String.prototype.splitBy = function (delimiter) {
var
delimiterPATTERN = '(' + delimiter + ')',
delimiterRE = new RegExp(delimiterPATTERN, 'g');
return this.split(delimiterRE).reduce((chunks, item) => {
if (item.match(delimiterRE)){
chunks.push(item)
} else {
chunks[chunks.length - 1] += item
};
return chunks
}, [])
}
除了你不该惹斯特恩。这是一个函数版本:
var splitBy = function (text, delimiter) {
var
delimiterPATTERN = '(' + delimiter + ')',
delimiterRE = new RegExp(delimiterPATTERN, 'g');
return text.split(delimiterRE).reduce(function(chunks, item){
if (item.match(delimiterRE)){
chunks.push(item)
} else {
chunks[chunks.length - 1] += item
};
return chunks
}, [])
}
你可以这样做:
var haystack = "aaaaaa<br />† bbbb<br />‡ cccc"
var needle = '<br \/>&#?[a-zA-Z0-9]+;';
var result = splitBy(haystack , needle)
console.log( JSON.stringify( result, null, 2) )
你会得到:
[
"<br />† bbbb",
"<br />‡ cccc"
]