2012-10-29 78 views
4

我需要一個RegEx for Javascript,它將匹配1-4行中的字符串「smith」,但不匹配下面的5-8行。
帶編號的行是Access數據庫中的字段(字段不包含數字)。
我至今是:Javascript正則表達式匹配沒有前後連字符的單詞

var xy = 'smith'; 
MyString = new RegExp('(^|\\W)' + xy + '(\\W|$)', 'i'); 

此史密斯匹配1-4行,但還可以是線7和8
我怎樣才能得到表達,從而也忽視史密斯這是在連詞後面還是後面?

  1. 史密斯,瓊斯,威爾遜
  2. 史密斯瓊斯威爾遜
  3. 瓊斯,史密斯(JR),威爾遜
  4. 瓊斯,威爾遜,史密斯
  5. 阿羅,瓊斯
  6. 威爾遜,史密森
  7. Jones,Smith-Treadstone,Wilson
  8. Wilson,Blakely-Smith,Jones

經過一個星期的數十次嘗試,我在問專家!

+0

當我在W以前寫的兩條斜線,我只看到了消息預覽窗口一個斜線。我不得不寫四個反斜槓才能在預覽窗口中看到兩個反斜槓。我點擊了提交,卻沒有意識到最終的顯示不會對應預覽版本。 – Commata

+0

我編輯問題(和我的答案相應)以反映您的實際代碼(與正確數量的反斜槓)。 –

回答

3

寫負字符類(\W)自己,包括連字符:

MyString = new RegExp('(^|[^a-z0-9_-])' + xy + '([^a-z0-9_-]|$)', 'i'); 

雖然\W匹配任何非單詞字符(一切,但字母,數字和下劃線),[^a-z0-9_-]匹配是任何字符既不這樣的單詞字符或連字符。

你當然可以使用\w該字符類中:

MyString = new RegExp('(^|[^\\w-])' + xy + '([^\\w-]|$)', 'i'); 
+0

謝謝,m.buettner,你的代碼完美工作,雖然我很好奇它爲什麼不需要在方括號內的A-Z! ridgerunner,我使用你的建議,因爲它更短,更甜,但我必須在第二個w之前添加一個反斜槓。 :-) – Commata

+0

@ user1781623,它不需要'AZ',因爲最後的'i'表示「不區分大小寫」 –

+0

@ridgerunner我這麼認爲,但我不確定爲什麼OPs版本甚至可以工作他用這4個反斜槓描述它的方式。 –

相關問題