【问题标题】:How would I go about splitting a string into characters - Javascript [closed]我将如何将字符串拆分为字符-Javascript [关闭]
【发布时间】:2025-12-29 18:10:10
【问题描述】:

我想拆分一个字符串,比如:

"Hello $id1, how are you $id2 etc...",

但是“$idInt”不应该被拆分:

const test = [
  "$id1",
  "$id2",
  "$id3"
]

let str = "test $id1!";
str = str.split("");
// wanted result: ["t", "e", "s", "t", " ", "$id1", "!"]; 
// actual result: ["t", "e", "s", "t", " ", "$", "i", "d", "1" "!"]

这将从“测试”数组中获取任何内容,而不是将其与每个单独的字符分开。

我只搜索了其他资源,但我还没有找到完全符合我要求的东西。

我也得到了这个代码:

    let reg = /\%\[a-zA-Z0-9]\:[0-9]+\%/gim;
    let yourstring = 'Some thinger %09ff:13%';
    let matches = reg.exec(yourstring);
    let records = [];
    let pieces = [];
    if (matches != null) {
        for (let [i, match] of Array.from(matches).entries()) {
            let start = yourstring.indexOf(match);
            let end = match.length + start;
            records.push({
                start: start,
                end: end,
                match: match,
            });
        }
        records.sort((a, b) => (a.start > b.start ? 1 : a.start < b.start ? -1 : 0));
        if (records[0].start > 0) {
            records = [{
                start: 0,
                end: 0,
                match: ""
            }].concat(records);
        }
        for (let i = 1; i < records.length; i++) {
            pieces.push(yourstring.slice(records[i - 1].end, records[i].start).replace(......)); // replace goes here
            pieces.push(records[i].match);
        }
        yourstring = pieces.join("")
    } else {
        yourstring = yourstring.replace(.......) // replace goes here
    } 

但它是正则表达式,我希望一组字符串不被替换,而不是这里用正则表达式替换

【问题讨论】:

标签: javascript arrays split


【解决方案1】:

我建议使用match 而不是split

let s = "Hello %id:1%, how are you %id:2% etc...";

let result = s.match(/%id:\d+%|./gs);

console.log(result);

【讨论】:

  • 我不太擅长正则表达式和那个,但是这里如何返回数组,每个字符都有不同的索引,但那里的 id 东西
  • result 不是您要询问的数组吗?如果没有,您能告诉我与您的预期有何不同吗?
  • Nvm,我把代码弄乱了一点,抱歉,我用自己的字符串试过了。
  • 谢谢你,这成功了!
  • 如果字符串可以包含 Unicode 字符,您可能还需要添加 u 标志。这确保任何 Unicode 代码点转义都将被解释为这样。例如。 "?".match(/./gs) //=&gt; ["\ud83d", "\ude0e"]"?".match(/./gsu) //=&gt; ["?"]
【解决方案2】:

你应该像这样使用 split 函数:

let str1 = "test %id:1%!"
let arr1 = str1.split('%')
let test = [];
// arr1 will become ['test ','id:1','!']
// every alternate one will become one of the usable one.
arr1.forEach((x,index)=>{
    if (index%2 == 1) {
        // push in test and add the '%'s back in.
        test.push(`%${x}%`)
    }
})
        

【讨论】:

  • 如何解析像这样的字符串:Hello %id:1%, look at this char: %. What you do think about that %id2%.
  • 哦,我没想到
  • 我的东西会用到一堆,所以可能不是最好的东西,尤其是对于“Discord Bot”,它会有一些与百分比和东西有关的东西
【解决方案3】:

Trincot 的答案更好,但我已经写了这个,所以在这里......

var str = "Hello %id:1%, how are you %id:2% etc...";

console.log(splitStr(str));

function splitStr(str) {
  var is_var = false;
  var chars = [];
  var group = '';
  for (var i = 0; i < str.length; i++) {
    let char = str[i];
    if (is_var) {
      group += char;
      if ('%' == char) {
        chars.push(group);
        group = '';
        is_var = false;
      }
    } else {
      if ('%' == char) {
        group += char;
        is_var = true;
      }else{
        chars.push(char);
      }
    }
  }
  return chars;
}

【讨论】: