Javascript正则表达式在逗号分隔的字符串中拆分单词
我正在尝试使用正则表达式拆分逗号分隔的字符串Javascript正则表达式在逗号分隔的字符串中拆分单词,javascript,regex,Javascript,Regex,我正在尝试使用正则表达式拆分逗号分隔的字符串 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. 任何捕获所有项目的建议。为什么不直接使用.split >'hi,mr.007,bond,12:25PM'.split(',') ["hi", "mr
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.
任何捕获所有项目的建议。为什么不直接使用
.split
>'hi,mr.007,bond,12:25PM'.split(',')
["hi", "mr.007", "bond", "12:25PM"]
如果出于某种原因必须使用正则表达式:
str.match(/(\S+?)(?:,|$)/g)
["hi,", "mr.007,", "bond,", "12:25PM"]
(注意包含逗号)。使用否定字符类:
/([^,]+)/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"]
你好,007先生,邦德,下午12:25
/([^,]+)/g
[“你好”,“007先生”,“邦德”,“下午12:25”]
如果传递的是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] }
此代码处理:
- 空行(上面没有值或逗号)
- 空列,包括最后一列为空
- 处理用双引号括起来的值,包括双引号内的逗号
- 但不处理用于转义双引号本身的两个双引号
匹配行首或最后一列后的逗号,但不将其添加到组中(?:^ |,)
匹配列的值,包括:(((?:[^“,]|“[^”]*”)
- 一个收集组,它收集零个或多个以下字符:
是一个不是逗号或引号的字符[^”,]
是一个双引号,后跟以另一个双引号结尾的零个或多个其他字符“[^”]*”
- 使用非收集组将这些数据或数据合并到一起:
(?:[^“,]|“[^”]*”
- 使用
重复上述任意次数:*
(?:[^“,]|“[^”]*”*
- 并放入一个收集组中,以给出列值:
(((?:[^“,]|“[^”]*”)
- 一个收集组,它收集零个或多个以下字符:
将双引号转义留给读者作为练习如何
a.split(',')
?如果我必须匹配Juan Gastelum中的Juan Gastelum
,该怎么办,media@nilc.org,213-375-3149
试试看。我的意思是我得到了名单,但我只想要胡安·加斯特鲁姆而不是名单。