簡體   English   中英

Javascript正則表達式在逗號分隔的字符串中拆分單詞

[英]Javascript regex splitting words in a comma separated string

我正在嘗試使用正則表達式拆分逗號分隔的字符串。

var a = 'hi,mr.007,bond,12:25PM'; //there are no white spaces between commas
var b = /(\S+?),(?=\S|$)/g;
b.exec(a); // does not catch the last item.

任何建議捕獲所有項目。

使用否定的字符類:

/([^,]+)/g

將匹配非逗號組。

< a = 'hi,mr.007,bond,12:25PM'
> "hi,mr.007,bond,12:25PM"
< b=/([^,]+)/g
> /([^,]+)/g
< a.match(b)
> ["hi", "mr.007", "bond", "12:25PM"]

為什么不直接使用.split

>'hi,mr.007,bond,12:25PM'.split(',')
["hi", "mr.007", "bond", "12:25PM"]

如果由於某種原因必須使用正則表達式:

str.match(/(\S+?)(?:,|$)/g)
["hi,", "mr.007,", "bond,", "12:25PM"]

(注意包含逗號)。

如果您傳遞的是CSV文件,那么您的某些值可能會有雙引號,因此您可能需要更復雜的內容。 例如:

Pattern splitCommas = java.util.regex.Pattern.compile("(?:^|,)((?:[^\",]|\"[^\"]*\")*)");

Matcher m = splitCommas.matcher("11,=\"12,345\",ABC,,JKL");

while (m.find()) {
    System.out.println( m.group(1));
}

或者在Groovy中:

java.util.regex.Pattern.compile('(?:^|,)((?:[^",]|"[^"]*")*)')
        .matcher("11,=\"12,345\",ABC,,JKL")
            .iterator()
                .collect { it[1] }

此代碼處理:

  • 空行(沒有值或逗號)
  • 空列,包括最后一列為空
  • 處理用雙引號括起來的值,包括雙引號內的逗號
  • 但是沒有處理用於轉義雙引號本身的兩個雙引號

該模式包括:

  • (?:^|,)匹配行的開頭或最后一列之后的逗號,但不會將其添加到組

  • ((?:[^",]|"[^"]*")*)匹配列的值,包括:

    • 收集組,收集零個或多個字符:

      • [^",]是一個不是逗號或引號的字符
      • "[^"]*"是雙引號,后跟零個或多個以另一個雙引號結尾的其他字符
    • 那些是使用非收集組共同編排的: (?:[^",]|"[^"]*")

    • 使用*重復上述任何次數: (?:[^",]|"[^"]*")*
    • 並進入一個收集組給列值: ((?:[^",]|"[^"]*")*)

逃避雙引號是留給讀者的練習

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM