[英]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.