Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式在逗号分隔的字符串中拆分单词_Javascript_Regex - Fatal编程技术网

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
试试看。我的意思是我得到了名单,但我只想要胡安·加斯特鲁姆而不是名单。