2014-09-18 30 views
1

我需要創建一個JavaScript正則表達式,它將捕獲單個或雙重之前出現的「單詞」:在特定字符前面捕獲單詞

下面是一些例子:

*, ::before, ::after // do not capture anything 
.class1, .class2:before,.class3::after // captures .class2 and .class3 
.class4::before // captures .class4 

This is what I have right now:/(\S+?):/g。它儘可能少地匹配任何非空白字符到無限次,然後在:處停止。

這工作情況除外:

  1. 如果在「詞」,它抓住太遠之前沒有空間。
  2. 它捕獲::before::after的第一個冒號。
+0

在':'之前是否必須有單詞字符?如果是的話,那麼你可以使用這個'(\ S +?\ b):?:'http://regex101.com/r/wU8uM7/4 – 2014-09-18 17:40:28

+0

我很抱歉,我意識到鏈接不符合我包括的例子。 – thetallweeks 2014-09-18 18:00:12

回答

0

你可以使用這個表達式:

([.\w]+):?:\w+ 

Working demo

enter image description here

您有需要,這個正則表達式的作用:

([.\w]+)  Captures alphanumeric and dots strings before 
:?:\w+  one or two colons followed with some alphanumeric 

比賽信息:

MATCH 1 
1. [57-64] `.class2` 
MATCH 2 
1. [72-79] `.class3` 
MATCH 3 
1. [119-126] `.class4` 
+0

如果我想允許使用連字符(即不僅包含字母數字和點),該怎麼辦? http://regex101.com/r/wS7pV8/3 – thetallweeks 2014-09-18 18:03:32

+0

@thetallweeks只需將它添加到'[。\ w]'就像'[ - 。\ w]'。請記住,[]允許你定義一組字符,所以'[ - 。\ w]'將允許'-','.','A-Za-z0-9_' – 2014-09-18 18:09:53

+0

啊!我誤解了''''裏面的'.'。謝謝。 – thetallweeks 2014-09-18 18:17:38

0

只需額外/可選:添加到末尾:

/(\S+?)::?/g 

或者你可以指定這,重複1-2次:

/(\S+?):{1,2}/g 

Demo

相關問題