2017-04-05 35 views
3

對於正則表達式,我很新,我正在努力學習。正則表達式從名稱中刪除公司類型

我正在創建一個郵件合併工具,並想使用RegExp給我更多的靈活性和控制。我替換的佔位符之一是company_name

我有一個公司的列表。許多公司的名稱中都有公司類型(例如,我的公司,Inc.或我的公司LLC)。我想用正則表達式來標準化結果。但是,我不知道如何編寫它,除了手動列出每個選項。例如,這些名字應該導致在年底相同的值:

  • 我公司LLC
  • 我的公司,有限責任公司
  • 我的公司,公司
  • 我的公司,公司
  • 我公司公司
  • 我公司公司
  • 我公司合作
  • 我公司

和和...

我相信我可以用它來實現我想要的結果:

var companyName = lead.company_name; 
companyName = companyName.replace(/(, Inc.)|(Inc.)|(, LLC)/gi, ''); 

不過,我希望有一個更有效的方法:

  1. 捕捉變化
  2. 確保公司類型總是在端
  3. 包含逗號和句號,如果他們存在,但沒有列出與不

注意所有選項: 我必須考慮現有的實際名稱的公司類型字符的可能性(例如,我的Co mpany Co),並且只在最後刪除組織類型。

這可以輕鬆完成嗎?

+0

「_AUTION:我必須說明在實際名稱中存在公司類型字符的可能性」是否意味着如果這些字符存在於實際名稱中,它們應該(或不應該)被刪除? –

+0

通常,例如,「Company,LLC」*是公司名稱。如果刪除「LLC」,則不再使用正確的名稱。 – Ouroborus

+0

@Ouroborus,你是對的,但沒有人會在電子郵件的正文中輸入完整的公司名稱(包括公司類型),所以很明顯它是生成的電子郵件,或者需要額外的操作才能在發送前進行清理。 – davids

回答

3

如果每家公司的名字本身就是一個字符串,你可以試試下面的正則表達式:

/,?\s*(llc|inc|co)\.?$/i

說明:

  • 可選逗號
  • 可選空白
  • 無論是LLC/Inc/Co(不區分大小寫)之一
  • Opti Onal地區期間
  • 上述所有的字符串的結尾

const companyNames = [ 
 
'My Company LLC', 
 
'My Company, LLC', 
 
'My Company, Inc.', 
 
'My Company, Inc', 
 
'MY Company Inc.', 
 
'My Company Inc', 
 
'My Company Co', 
 
'My Company', 
 
]; 
 

 
console.log(companyNames.map(name => name.replace(/,?\s*(llc|inc|co)\.?$/i, '')));

+0

這與我投入它的一切工作。謝謝! – davids

5

是的,還有一個更有效的方法(如果通過高效我們的意思是更短),雖然像這樣的多條件模式通常導致簡潔性和可讀性之間的折衷。

這是一個分組的問題,它允許我們避免重複。

var rgx = /(, ?)?(LLC|Inc|Co)\.?$/i; 

讓我們來分解它。

  • 第一部分,(, ?)?說,該公司的名稱應該是後面可以跟一個逗號的組合和可選的空間。所以這將不允許逗號,後面沒有空格的逗號,或後面有空格的逗號。

  • 第二部分,(LLC|Inc|Co)是一個簡單的子組allwing不同類型後綴

  • 最後一部分,\.?,允許在最後的可選週期(我們逃離期,因爲在大多數regex實現該期限有特殊含義,與任何非空格字符匹配)。

還要注意你不需要g標誌,因爲(大概)沒有公司名稱將有不止一種類型的後綴。此外,$標誌在此處非常有用,因爲它可以確保我們的匹配必須位於公司名稱的末尾,而不僅僅是位於其中的某處。

+0

好點 - 編輯。 – Utkanos

+0

這將「我的公司,LLC」轉換爲「我的公司」, – davids

+0

謝謝您的回覆和解釋。但是,'(,?)?'不會像預期的那樣刪除'',''。否則,它的作品。 – davids

2

我會怎麼做:

companyName = companyName .replace(/,?\h*(?:\b(?:inc|LLC|co)\b\.?)?$/i,""); 

說明:

/      : delimiter 
    ,?     : optional comma 
    \h*     : optional horizontal spaces 
    (?:     : non capture group 
     \b    : word boundary 
     (?:inc|LLC|co) : non capture group, one of the alternatives 
     \b    : word boundary 
     \.?    : a dot, optional 
    )?     : end group, optional 
    $     : end of string 
/i      : delimiter, case insensitive 
+0

爲什麼?我們可以得到解釋嗎? – Ouroborus

+0

這將「我的公司,LLC」轉換爲「我的公司」 – davids

+0

@davids:我已經添加了字邊界來處理這個問題。看我的編輯。 – Toto