正则表达式中的重复部分

时间:2015-03-30 13:20:17

标签: javascript jquery python regex perl

我有以下字符串

car.wheel
car.wheel.mirror
car.wheel.mirror.seats
car.wheel.mirror.seats...

我想从中提取car并避免附加对象的属性,例如.wheel.wheel.mirror.wheel.mirror.seats等。

我现在的正则表达式是

/(.*)?(\.+.*){2}/

这适用于2或3,因为我指定了数字,但我想创建而不指定属性数,因为它可以是0或更多

所以我尝试了以下两种但不起作用

/(.*)?(\.+.*){0,}/
/(.*)?(\.+.*)*/

我在Jquery / JS中尝试这个,如果这对使用别的东西有所帮助。

3 个答案:

答案 0 :(得分:4)

无需使用正则表达式。即使您的字符串没有任何其他属性,也可以进行简单的拆分:

'car'.split('.')[0]
'car.wheel.mirror.seats'.split('.')[0]

答案 1 :(得分:3)

我会用:

var x = $(yourstring).split(".");
console.log(x[0]);

或者

var text = "your.text.string";
var regex =  /^(.*?)\./;
var matches = text.match(regex);
console.log(matches[0]);

答案 2 :(得分:0)

我想这是标记的" perl"对于正则表达式的一部分。我同意@silkfire - 处理这些选择的字符串,你真的不需要正则表达式的全部功能。

无论如何,在perl中也是如此:

my @strings = qw { 
   car
   car.wheel
   car.wheel.mirror
   car.wheel.mirror.seats
   car.wheel.mirror.seats.heater };

say [ split /\./ ]->[0] for @strings 

稍微OT,但标签鼓励我):

与Javascript字符串不同,它不是Perl中的对象,但您可以假装:

perl -E 'say +(split /\./, "car.wheel.mirror.seats.heater")[0]'

甚至更不客气:

perl -Mautobox::Core -e ' "car.wheel.mirror"->split(qr/\./)->[0]->say '

使用autobox::Core,您可以将事物链接起来,并且在不必放弃perl5的情况下感受到所有的常规。