2014-11-25 43 views
1

尋找能夠分裂像表達式的正則表達式:正則表達式拆分:分割塔送入名稱,百分比andsolvent

A-6-B 10 /%XYZ

成:

A-6-b
10%
/XYZ

注意,第一組也可以包含空格和數字:

AQDF 100 56%/ ABC

和百分比可以是浮動:

SFSDF 0.1%/ ABC

我已經想出了(^[A-Z\s\d-]*)(?!%)(\d+%)(.*$)但這個鼻涕鼻涕匹配任何p百分比是浮動的,更重要的是即使是簡單的例子,如ABC 10%/XYZ也會失敗,因爲百分比的第一位數被分配給第一個捕獲組。

任何想法如何我可以實現我想要的?我不是一個正則表達式的專家...

編輯:例如

在固定的錯誤EDIT2:

的例子是不完整的。在這裏,人們更多:

ABC Dwsd 0.01%/ XYZ QST

  • 第一部分可以包含空格
  • 半句包含空格
  • 數量可以是浮動
+0

是不是你的用例只是'確保在最後一個字母組之前有空格嗎? – Deltharis 2014-11-25 12:22:22

回答

1

別t通過使用一個不可讀的正則表達式來過度複雜化。

根據你所說的話,你的分離是有嚴格規定(最後空間,最後)。在JavaScript中,例如,你可以使用:

var str = "A-6-b 10/%XYZ"; 

var firstSeparator = str.lastIndexOf(' '); 
var secondSeparator = str.lastIndexOf('%'); 

var name = str.substring(0, firstSeparator); 
var percentage = str.substring(firstSeparator + 1, secondSeparator + 1); // we want to include the % separator in this one 
var solvent = str.substring(secondSeparator + 1); 

console.log(name, percentage, solvent); 

工作的jsfiddle:http://jsfiddle.net/rL5uymhm/

(有可能是你的問題一個錯字,因爲你的例子上出現/符號,其中不同所以代碼可能。需要扭捏我的觀點仍然有效。 - 不使用正則表達式的緣故時,有一個更具可讀性的替代)

如果你真的想使用正則表達式/^(.+)([^%]+%)(.*)$/應該工作。

+0

對不完整的例子。第一部分也可以包含一個空間。 – 2014-11-26 05:25:20

+0

@beginner_我知道 - 我的回答容納,不是嗎? – Shai 2014-11-26 13:39:40

0

這一個對我的作品(使用PCRE):

/^(.+) ([0-9.]+)[\/%]+([^\/]+)$/ 
1

超級簡單:

/^(.*) ([1-9][0-9]*(?:\.[0-9]+)?%)(.*)$/ 

最容易識別的產品你的百分比,所以([1-9][0-9]*(?:\.[0-9]+)?%) pa rt處理髮現。

然後,這只是一個獲取所有內容(不包括最終空間)以獲取名稱以及獲取溶劑後的所有內容的情況。

完成。