2016-12-03 187 views
0

我試着寫正則表達式匹配這些精確匹配精確的字符串:正則表達式匹配與撇號

  • 「我在」
  • 「我走了」

我不是在尋找單個字符。我正在尋找一個確切的字符串,並試圖瞭解reg是如何工作的。

我已閱讀Eloquent JS中的MDN文檔和chapter以及搜索stack overflow對話。

我明白,方括號內的任何內容都代表一個字符集,而且字符不必在一個序列中出現。

我試圖/[i\'m] in/這在我的代碼工作,但是當我運行:

/[i\'m] in/.exec('i\'m in')其值爲[「米」]

我也嘗試/i\'m in/不中我的代碼工作,但時當我運行:

/i\'m in/.exec('i\'m in')其值爲[「我在」]

不知道爲什麼會這樣。任何指針或照明都會很棒。

+0

撇號字符不是在正則表達式特殊。您不必引用或轉義它。 '/我是(in | out)/'應該這樣做。如果你想匹配那些*完整的確切字符串,'/ ^我是(in | out)$ /' – Pointy

+0

也是'.exec()'函數返回一個匹配模式部分的數組。你的最後一個例子工作正常。你期望它返回什麼? – Pointy

+0

如果你想看看正則表達式匹配什麼,你可以玩http://www.regexpal.com/ – some

回答

1

您的正則表達式只匹配4個字符,而您的完整字符串長度爲6個字符。

/[i\'m] in/.exec('i\'m in') 

正則表達式 - >[i\'m] in

它將匹配4個字符。第一個字符可以是i\'m。第二個字符是space,第三個字符是i,第四個字符是n。您不必在正則表達式中使用\作爲'。但是您需要在JS字符串中使用\作爲'

字符串 - >'i\'m in'
m in是正則表達式匹配的字符串。 它也能匹配這些字符串: i in' in

如果你想字符串的所有6個字符相匹配,你可以使用這樣的事情:

/i'm in/.exec('i\'m in') 

演示:https://repl.it/EfDS/3

如果你要匹配輸入或輸出,您可以使用or運算符。

/i'm (in|out)/.exec('i\'m out') 

演示:https://repl.it/EfDS/4

+0

非常感謝。這有很大幫助。 – dho

+2

你爲什麼使用'[i \ m] {3}'?這不是寫這個問題的人想要的。它匹配'iii','ii'','iim','i'i','i''','i'm','imi','im'','imm',''ii' ,'''','''','''','''','''''','''','''','''','''''','mii',' 'mi'','mim','m'i','m'','m'm','mmi','mm''和'mmm'。這個人想要的東西就像'/ ^我是(in | out)$ /' – some

+0

是的你是對的。我會糾正它。但重點在於他的正則表達式只匹配4個字符。謝謝。 – MYGz