Regex to pick characters outside of pair of quotes

前端 未结 6 1456
广开言路
广开言路 2020-11-22 00:29

I would like to find a regex that will pick out all commas that fall outside quote sets.

For example:

\'foo\' => \'bar\',
\'foofoo\' => \'bar,         


        
6条回答
  •  时光说笑
    2020-11-22 01:21

    While it's possible to hack it with a regex (and I enjoy abusing regexes as much as the next guy), you'll get in trouble sooner or later trying to handle substrings without a more advanced parser. Possible ways to get in trouble include mixed quotes, and escaped quotes.

    This function will split a string on commas, but not those commas that are within a single- or double-quoted string. It can be easily extended with additional characters to use as quotes (though character pairs like « » would need a few more lines of code) and will even tell you if you forgot to close a quote in your data:

    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

提交回复
热议问题