Javascript - 用白色 space 拆分字符串并用“|”连接两个单词

Javascript - Split string by white space and join two words by "|"

我觉得这很简单,但我想不出来。

var str = "How are you doing today?";
var res = str.split(/\s+/g);

结果将是:How,are,you,doing,today?。当用户添加字符“|”在这样的两个词之间

var str = "How are you |doing today?";

结果应该是:How,are,you doing,today?

试试这个:

var source = "How are you |doing today?";
var result = source
  .split(/\s+(?!\|)/g)
  .map(function(segment) {
    return segment.replace(/((\s+)\|)/g, '');
  });
  
console.log(result);

首先,字符串 split 后面没有 管道字符 (|) 的空白序列,使用 负数lookahead,然后生成的数组被映射,例如每个段的空白序列后跟管道字符仅替换为每个匹配组(</code>)的空白部分(<code>) ).


如果 Array.map 没有在 Extendscript 中实现,这里是另一个使用常规 for 循环的例子:

var source = "How are you |doing today?";
var rawArray = source.split(/\s+(?!\|)/g);
var result = [];

for (var i = 0; i < rawArray.length; i++) {
  result[i] = rawArray[i].replace(/((\s+)\|)/g, '');
}
  
console.log(result);

您无法做到您所描述的只是 split。您可以使用否定先行断言 (/ (?!\|)/) 来关闭,但它会在字符串中留下 |

var str = "How are you |doing today?";
var arr = str.split(/ (?!\|)/);
console.log(arr);

...所以我们必须做更多。可能最简单的方法是在拆分后用 space 替换 space-plus-bar:

var str = "How are you |doing today?";
var arr = str.split(/ (?!\|)/).map(function(s) {
  return s.replace(/ \|/g, ' ');
});
console.log(arr);

或在 ES2015+ 中:

const str = "How are you |doing today?";
const arr = str.split(/ (?!\|)/).map(s => s.replace(/ \|/g, ' '));
console.log(arr);

首先用管道替换所有白色 space。然后每次遇到两个或更多管道时用白色 space 替换。然后按管道拆分:

var str = `How  are you |doing today?
fine | thanx`;
var arr = str.replace(/ {1,}/g,"|").replace(/\|{2,}/g," ").split(/\||\n/);
console.log(arr);