我正在尝试用多个分隔符分隔字符串并将它们包含在结果中。将所有连续的非空白字符视为单个单词。例如:“我正在研究一个新的超级项目哇。呀!”成为“!Yay。我的项目 - 超级新工作我是” 我的代码是:
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)
到目前为止的输出是: 好极了!哇。项目 - 超级新的工作我
我仍然得到错误的结果。任何帮助,将不胜感激。
答案 0 :(得分:1)
我建议首先使用粘贴的标点符号交换单词(使用.replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"$1$3$2")
),然后匹配所有非空格块并使用空格加入:
function test(string){
console.log(string.replace(/(^|\s)(\w+)([^\w\s]+)(?!\S)/g,"$1$3$2").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组:字符串或空格的开头(\w+)
- 第2组:一个或多个单词字符([^\w\s]+)
- 第3组:除了单词和空格之外的任何1个以上的单词(?!\S)
- 当前位置的右侧不允许使用非空白字符。与(^|\s)
一起,这些子图案形成空白字边界。答案 1 :(得分:0)
规则不是那么清楚,可能会有更多的案例要包括但如果没有,分裂[!?.\s-]+
(或任何分隔符)将是一个解决方案。您不需要入侵.replace()
或.match()
方法:
var str = "I'm working on a new super-project wow. Yay!";
console.log(str.split(/([!?.\s-])/g).reverse().join(''));