日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

獲取字符串大括號里面的值 ,并判斷字符串是否符合要求

作者:讓時光到此為止。 更新時間: 2022-02-15 編程語言

一個特殊的需求:要求找出雙大括號中間的值

let str = '我的名字叫{{讓時光到此為止}},今年{{5}}歲了,是一個{{學生}}'
let rep =  str.match(/(?<=\{\{)[^}]*(?=\}\})/g)
let rep2 =  str.match(/\{\{(.*?)\}\}/g)
// 輸出的是{{}} 兩個大括號中間的內容并返回一個數組
console.log(rep ) // ["讓時光到此為止", "5", "學生"]
// 輸出的是{{}} 和 兩個大括號中間的內容并返回一個數組
console.log(rep2 ) // ["{{讓時光到此為止}}", "{{5}}", "{{學生}}"]

如果給出的字符串中兩個括號不對稱怎么辦呢? 比如:

‘我的{{{名字叫{{{{{{讓時光到此為止}},今年{{5}}歲了,是一個{{學生}}’

這種情況就需要我們去判斷字符串是否符合我們的要求了,如果不符合要求,需要提示錯誤

/**
 * 判斷當前字段串左右雙大括號有無結束
 * @param str 字符串
 */
 let str = '我的名字叫{{讓時光到此為止}},今年{{5}}歲了,是一個{{學生}}'
 let str2 =  '我的{{{名字叫{{{{{{讓時光到此為止}},今年{{5}}歲了,是一個{{學生}}'
 console.log(bracketCheck(str)) // false
 console.log(bracketCheck(str2)) // true
export const bracketCheck = (str)=>{
  let arr = str.split('') // 將字符串轉化為數組
  // StackBase 是一個簡易棧,大家也可以用數組代替
  let stack = new StackBase() // 新建棧
  let aString ='{}' // 用來匹配的字符串
  for(let i of arr){
    if( aString.indexOf(i)!==-1){ // 左右括號
      stack.push(i)
      if(stack.length()===4){
        let target = stack.pop(),
            target2 = stack.pop(),
            target3 = stack.pop(),
            target4 = stack.pop()
        if(target !== target2 || target3 !== target4 ||
            target !=='}' || target4!=='{'
          ){
            return false
        }
      }
    }
  }
  return stack.length()===0? true: false
}
/**
 * 簡易棧
 */
export class StackBase{
    constructor(public dataStore?: any[],public top?: number) {
        this.dataStore = []
        this.top = 0 // 初始化為0
    }
    push(element){ // 入棧
        this.dataStore[this.top++] = element
    }
    pop(){ // 出棧
        return this.dataStore[--this.top]
    }
    peek(){ // 查看棧頂元素
        return this.dataStore[this.top-1]
    }
    clear(){ // 清空棧
        this.top=0
    }
    length(){ // 棧內存放的元素個數
        return this.top
    }
}

原文鏈接:https://blog.csdn.net/qq_35257117/article/details/105486604

欄目分類
最近更新