【问题标题】:Regex for repetitive part in string字符串中重复部分的正则表达式
【发布时间】:2015-03-30 13:20:17
【问题描述】:

我有如下字符串

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 中尝试这个,如果这对使用其他东西有影响的话。

【问题讨论】:

  • ^([^.]+)\. 呢?
  • 一定要用正则表达式吗?为什么不直接拆分“.”?
  • @tobias_k 是的。我需要开始部分。
  • @robert 不错的选择。
  • jwz 说“有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。 :-)

标签: javascript jquery python regex perl


【解决方案1】:

无需使用正则表达式。一个简单的拆分就可以了,即使您的字符串没有任何附加属性,它也可以工作:

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

【讨论】:

  • ++ 因为并非所有内容都是正则表达式 .. errm wait .. split() 默认采用正则表达式并且必须被告知采用文字字符;还是需要文字字符并且必须被告知使用正则表达式;-)
【解决方案2】:

我会使用:

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

或者

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

【讨论】:

  • 关于您的第二个解决方案:必须使用哪种方法?不要忘记这必须与 0 属性一起使用。一个小点必须被转义。
  • 更简单的"your.text.string".match(/^[^.]*/)[0]
【解决方案3】:

我猜这被标记为“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。

【讨论】:

  • 一些疯狂的人甚至为autobox/Core.pm 制作快捷方式/别名模块,所以他们可以这样做:perl -Mabc -e '"a string an object?!both ;-)"->split(qr/\?/)->[1]->say' ... ;-)
猜你喜欢
  • 2019-03-23
  • 2021-02-15
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多