Javascript - 根据字符拆分字符串,但将其保留在结果数组中

Bha*_*lli 3 javascript arrays string

输入

((Sass and Javascript) or (Python and Scala))
Run Code Online (Sandbox Code Playgroud)

分隔符 - "("和")"

输出是一个数组,其中分隔符作为元素出现

["(","(","Sass and Javascript",")","or","(","Python and Scala",")",")"]
Run Code Online (Sandbox Code Playgroud)

我面临的问题是这个.

var arr = "((Sass and Javascript) or (Python and Scala))".split(/[(|)]/);
console.log(arr);
document.getElementById("output").innerHTML = arr;
Run Code Online (Sandbox Code Playgroud)
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)

当我在字符串上使用split时,我将丢失"("和")"字符,因为它们可能出现在字符串中的任何位置,我将需要手动将它们插入到数组中.在JS中有更好的方法吗?

Tus*_*har 7

你可以使用正则表达式

/[()]|[^()]*/g
Run Code Online (Sandbox Code Playgroud)

正则表达式演示和解释

  1. [()]:匹配(或只匹配)一次
  2. |: 要么
  3. [^()]:否定类,排除()
  4. *:匹配前面的类中的零个或多个
  5. g:全球比赛

演示

var str = '((Sass and Javascript) or (Python and Scala))';
var matches = str.match(/[()]|[^()]*/g) || [];
matches.pop(); // Remove the last empty match from array

console.log(matches);
document.write('<pre>' + JSON.stringify(matches, 0, 2) + '</pre>');
Run Code Online (Sandbox Code Playgroud)