Javascript 如何用多个分隔符拆分字符串并将它们包含在结果中
Javascript how to split string by multiple delimiters and include them in the result
我正在尝试用多个定界符分隔字符串并将它们包含在结果中。将所有连续的非空白字符视为单个单词。示例:"I'm working on a new super-project wow. Yay!" 变为“!Yay .wow project-super new a on working I'm”
到目前为止我的代码:
function test(string){
console.log(string.split(/([.'\!'+a-zA-Z]+)/g ).reverse().join(' ') );
}
var string ="I'm working on a new super-project wow. Yay!"
test(string)
到目前为止的输出是:
耶!哇。项目 - 超级新的工作我是
我仍然得到错误的结果。任何帮助,将不胜感激。
我建议先用标点符号交换单词(使用 .replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"")
),然后匹配所有非白色 space 块并加入 space:
function test(string){
console.log(string.replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"").match(/\S+/g).reverse().join(' ') );
}
//"!Yay .wow project-super new a on working I'm"
var string ="I'm working on a new super-project wow. Yay!"
test(string)
单词标点交换正则表达式详细信息:
(^|\s)
- 第 1 组:字符串开头或白色space
(\w+)
- 第 2 组:一个或多个单词字符
([^\w\s]+)
- 第 3 组:除 word 和 whitespace chars 以外的任何 1+ 个词
(?!\S)
- 在当前位置的右边不允许非白色space 字符。这些子模式与 (^|\s)
一起形成 whitespace 字边界 .
规则不是很清楚,可能会有更多情况要包括,但如果没有,拆分 [!?.\s-]+
(或任何分隔符)将是一个解决方案。您不需要侵入 .replace()
或 .match()
方法:
var str = "I'm working on a new super-project wow. Yay!";
console.log(str.split(/([!?.\s-])/g).reverse().join(''));
我正在尝试用多个定界符分隔字符串并将它们包含在结果中。将所有连续的非空白字符视为单个单词。示例:"I'm working on a new super-project wow. Yay!" 变为“!Yay .wow project-super new a on working I'm” 到目前为止我的代码:
function test(string){
console.log(string.split(/([.'\!'+a-zA-Z]+)/g ).reverse().join(' ') );
}
var string ="I'm working on a new super-project wow. Yay!"
test(string)
到目前为止的输出是: 耶!哇。项目 - 超级新的工作我是
我仍然得到错误的结果。任何帮助,将不胜感激。
我建议先用标点符号交换单词(使用 .replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"")
),然后匹配所有非白色 space 块并加入 space:
function test(string){
console.log(string.replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"").match(/\S+/g).reverse().join(' ') );
}
//"!Yay .wow project-super new a on working I'm"
var string ="I'm working on a new super-project wow. Yay!"
test(string)
单词标点交换正则表达式详细信息:
(^|\s)
- 第 1 组:字符串开头或白色space(\w+)
- 第 2 组:一个或多个单词字符([^\w\s]+)
- 第 3 组:除 word 和 whitespace chars 以外的任何 1+ 个词
(?!\S)
- 在当前位置的右边不允许非白色space 字符。这些子模式与(^|\s)
一起形成 whitespace 字边界 .
规则不是很清楚,可能会有更多情况要包括,但如果没有,拆分 [!?.\s-]+
(或任何分隔符)将是一个解决方案。您不需要侵入 .replace()
或 .match()
方法:
var str = "I'm working on a new super-project wow. Yay!";
console.log(str.split(/([!?.\s-])/g).reverse().join(''));