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

Javascript - Split a string based on a character but retain it in the resulting array

本文关键字:保留 结果 数组 -根 字符 拆分 字符串 Javascript      更新时间:2023-09-26

输入

((Sass and Javascript) or (Python and Scala))

分隔符 -"("answers")"

Output是一个数组,分隔符作为元素

["(","(","Sass and Javascript",")","or","(","Python and Scala",")",")"]
我所面临的问题是这样的。

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

当我在字符串上使用拆分时,我失去了"("answers")"字符,因为它们可能出现在字符串中的任何地方,我需要手动将它们插入到数组中。在JS中有更好的方法来做到这一点吗?

可以使用regex

/[()]|[^()]*/g

Regex演示与说明

  1. [()]:匹配()一次
  2. |: or
  3. [^()]:否定类,不包括()
  4. *:匹配0个或多个前面的类
  5. g: Global match

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>');

就这么简单

var string = '((Sass and Javascript) or (Python and Scala))';
var result = str.match(/[()]|[^()]*/g);
console.log(result)
var string = "abcdeabcde";
string = string.replace(/(/gi, ",(,");
string= string.replace(/)/gi, ",),");
var newstring = string.split(",");
return newstring;

您可以在分割中使用捕获括号来简化这一点。(注意,这显然不是所有浏览器都支持的。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)

当您在拆分正则表达式中使用捕获括号时,捕获的分隔符将与'拆分'内容一起返回到列表中。

"((Sass and Javascript) or (Python and Scala))".split(/'s*([()])'s*/)

输出
["", "(", "", "(", "Sass and Javascript", ")", "or", "(", "Python and Scala", ")", "", ")", ""]

您可能需要稍后处理它以排除零长度的元素。

var log = function(val){
  console.log(val);
  document.write('<pre>' + JSON.stringify(val , null , ' ') + '</pre>');
  }
var firstStr = '((Sass and Javascript) or (Python and Scala))';
var secondStr = '{>Sass and Javascript< or [Python and Scala]}';
var firstArr = firstStr.match(/[^A-Za-z ]|[A-Za-z ]+/g);
var secondArr = secondStr.match(/[^A-Za-z ]|[A-Za-z ]+/g);
     log(firstArr);
     log(secondArr);
<div id ='el'></div>