鍍金池/ 問答/HTML5  Java  HTML/ 怎么截取不規(guī)則字符串

怎么截取不規(guī)則字符串

例如我有一個1232{按鈕1}{按鈕2}765432這樣動態(tài)的字符串(長度不固定)我怎么拿到1231和{按鈕1},{按鈕2},765432?

回答
編輯回答
殘淚
const str="1232{按鈕1}{按鈕2}765432";
const result=str.split(/(?=\{)|(?<=})/g);
//?["1232", "{按鈕1}", "{按鈕2}", "765432"]

然后把數(shù)字字符串轉(zhuǎn)成數(shù)字。

result.map(str=>{let num=parseInt(str); if(num)return num; return str;});

使用了向前匹配和向后匹配,看這篇


可以用函數(shù)處理,逐個字符串進(jìn)行判斷。
最好自己嘗試實現(xiàn)以下這個函數(shù)...

const str = "1232{按鈕1}{按鈕2}765432";
function handleStr(str) {
  const result = [];
  //表示是否在處理花括號內(nèi)的字符
  let inBraceNow = false;
  for (let i = 0; i < str.length; i++) {
    const currentChar = str[i];
    if (inBraceNow) {
      result[result.length - 1] += currentChar;
      if (currentChar == "}") {
        inBraceNow = false;
      }
    } else {
        //遇到"{"開始進(jìn)入花括號處理階段...
      if (currentChar == "{") {
        result.push("{");
        inBraceNow = true;
      } else {
          // result數(shù)組為空時,需要初始化
          //如果數(shù)組最后一個不能轉(zhuǎn)為數(shù)字,說明是剛進(jìn)入數(shù)字處理階段,需要傳入一個0
        if (result.length == 0||(!+result[result.length-1])) {
          result.push(0);
        }
        result[result.length - 1] =10*result[result.length - 1]+(+currentChar);
      }
    }
  }
  return result;
}
console.log(handleStr(str));
2017年10月15日 03:27