【问题标题】:Javascript how to split string by multiple delimiters and include them in the resultJavascript如何通过多个分隔符拆分字符串并将它们包含在结果中
【发布时间】:2018-04-30 19:37:33
【问题描述】:

我正在尝试用多个分隔符分隔字符串并将它们包含在结果中。将所有连续的非空白字符视为单个单词。示例:“我正在开发一个新的超级项目哇。耶!”变成“!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)

目前的输出是: 耶!哇。项目 - 我在工作的超级新人

我仍然得到错误的结果。任何帮助,将不胜感激。

【问题讨论】:

  • 希望对您有所帮助。 stackoverflow.com/questions/5993779/…
  • 当前接受的答案保持 super-project 不变,但应该是 project-superCheck this.
  • Roman,您的 将所有连续的非空白字符视为单个单词 要求与预期结果相冲突。我的回答符合这个要求。请确保您选择了正确的答案。

标签: javascript regex delimiter


【解决方案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) 一起构成空白词边界

【讨论】:

    【解决方案2】:

    规则不是很清楚,可能有更多情况需要包括,但如果没有,在[!?.\s-]+(或任何分隔符)上拆分将是一个解决方案。您无需破解 .replace().match() 方法:

    var str = "I'm working on a new super-project wow. Yay!";
    console.log(str.split(/([!?.\s-])/g).reverse().join(''));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多