Javascript分割正则表达式问题

149

大家好,我正在尝试使用Javascript实现一个看似简单的正则表达式,但是却给我带来了很多麻烦。我想通过JavaScript将日期按照'-', '.', '/',和空格进行分割。

var date = "02-25-2010";
var myregexp2 = new RegExp("-."); 
dateArray = date.split(myregexp2);

这个问题需要正确的正则表达式,希望能得到任何和所有的帮助。

7个回答

223
你需要在一个字符类中放置你希望分割的字符,这会告诉正则表达式引擎 "这些字符中的任何一个都是匹配项"。对于你的目的而言,代码应该如下所示:

你需要把你想要分割的字符放在一个字符类中,这会告诉正则表达式引擎“任何这些字符都是匹配项”。对于你的目的而言,代码应该如下所示:

date.split(/[.,\/ -]/)

虽然破折号在字符类中具有特殊含义,表示范围(例如[a-z][abcdefghijklmnopqrstuvwxyz] 相同),但如果将其放置在类的最后,则视为字面意义的破折号,无需进行转义。

为了解释为什么您的模式不起作用,/-./表示正则表达式引擎匹配一个字面意义的破折号字符后跟任意字符(是正则表达式中的通配符)。对于"02-25-2010",每次遇到"-2"都会分割,因为破折号匹配并且点匹配"2"。


5
在字符类内部,点号 不会 有任何特殊含义,它不像通配符那样起作用(这是没有意义的),而是作为字面量。 - Bobby Jack

14

或只是(除了数字以外的任何内容):

date.split(/\D/);

6
你可以直接使用

标签。

date.split(/-/);

或者

date.split('-');

2
在你的代码前加一个换行符,然后再加上4个空格,它就会被正确地格式化。 - Brandon

6

假设你的字符串是:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

您想使用以下分隔符拆分字符串:

  • 冒号
  • 分号
  • 换行符

您可以按如下方式拆分字符串:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

最后,您可能需要修剪数组中的元素:

let elements = rawElements.map(element => element.trim());

1
为什么要使用 g 标志? - d-b

5

然后按除数字外的任何字符拆分它:

date.split(/[^0-9]/);

0

或者只需使用日期字符串2015-05-20或2015.05.20

date.split(/\.|-/);

-2

试试这个替代方案

date.split(/\W+/)


你能解释一下为什么这个答案比之前已经发布的五个答案更好吗?还有它是如何实际运作的? - mjuarez
这对我来说实际上是所有答案中最好的。 - reectrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接