亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在引號之外選擇逗號的Regex

在引號之外選擇逗號的Regex

蕪湖不蕪 2019-06-17 17:36:07
我不太確定這是否可能,所以我求助于你。我想找一個正則表達式,將挑選所有逗號以外的引號集。例如:'foo' => 'bar','foofoo' => 'bar,bar'這將在第1行之后選擇單個逗號。'bar',我不關心單引號還是雙引號。有人有什么想法嗎?我覺得這是有可能的,但我的判斷力太弱了。在引號之外選擇逗號的Regex
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

下面的regexes將匹配在雙引號之外的所有逗號,

,(?=(?:[^"]*"[^"]*")*[^"]*$)

演示

(僅限PCRE)

"[^"]*"(*SKIP)(*F)|,

"[^"]*"匹配所有雙引號塊。也就是說,在這個buz,"bar,foo"輸入,此正則表達式將匹配"bar,foo"只有。下面是(*SKIP)(*F)使比賽失敗。然后,它移動到旁邊的模式|符號,并嘗試匹配剩余字符串中的字符。也就是說,在我們的產出中,模式旁邊|將只匹配后面的逗號。buz..注意,這與雙引號中的逗號不匹配,因為我們已經將雙引號部分跳過了。

演示


下面的regex將匹配雙引號中的所有逗號,

,(?!(?:[^"]*"[^"]*")*[^"]*$)

演示


查看完整回答
反對 回復 2019-06-17
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

雖然可以使用regex(我和下一個人一樣喜歡濫用regexes)來破解它,但您遲早會遇到麻煩,嘗試在沒有更高級解析器的情況下處理子字符串。陷入困境的可能方法包括混合引號和轉義引號。

此函數將在逗號上拆分一個字符串,但不是在單引號或雙引號內的逗號。它可以很容易地用額外的字符作為引號進行擴展(雖然像“這樣的字符對還需要幾行代碼),甚至可以告訴您,如果您忘記關閉數據中的引號:

function splitNotStrings(str){
  var parse=[], inString=false, escape=0, end=0

  for(var i=0, c; c=str[i]; i++){ // looping over the characters in str
    if(c==='\\'){ escape^=1; continue} // 1 when odd number of consecutive \
    if(c===','){
      if(!inString){
        parse.push(str.slice(end, i))
        end=i+1
      }
    }
    else if(splitNotStrings.quotes.indexOf(c)>-1 && !escape){
      if(c===inString) inString=false
      else if(!inString) inString=c    }
    escape=0
  }
  // now we finished parsing, strings should be closed
  if(inString) throw SyntaxError('expected matching '+inString)
  if(end<i) parse.push(str.slice(end, i))
  return parse}splitNotStrings.quotes="'\"" // add other (symmetrical) quotes here


查看完整回答
反對 回復 2019-06-17
  • 3 回答
  • 0 關注
  • 675 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號