2016-11-07 73 views
-1

條件:
任何以a開始並以b結尾的詞都有中間char數字。這個詞不應該在與符 '#'在javascript中,以下要求的正則表達式是什麼

給定的字符串開始行:

a1b a2b a3b 
#a4b a5b a6b 
a7b a8b a9b 

預期輸出:

a1b 
a2b 
a3b 
a7b 
a8b 
a9b 

正則表達式:我需要它爲javascipt。

到目前爲止已經試過以下的事情:

var text_content =above_mention_content 
var reg_exp = /^[^#]?a[0-9]b/gmi; 
var matched_text = text_content.match(reg_exp); 
console.log(matched_text); 

Getting below output: 

[ 'A1B', 'A7B']

+2

我沒有投票你的問題,但至少告訴我們你到目前爲止嘗試過什麼。 – Ismail

+0

行..感謝您的反饋..我會更新我的問題,我的努力 – Vikash

+0

@hamism更新了問題...如果你有任何想法..請分享.. – Vikash

回答

1

/^[^#]?a[0-9]b/gmi將匹配匹配行的開始,則1模式的多次出現或0字符除#,然後a,數字和b。不檢查整個單詞,也不實際匹配比字符串開頭更遠的單詞。

您可以使用正則表達式將匹配行開始#和匹配並捕獲你在其他情況下需要的話:

var s = "a1b a2b a3b\n#a4b a5b a6b\n a7b a8b a9b"; 
 
var res = []; 
 
s.replace(/^[^\S\r\n]*#.*|\b(a\db)\b/gm, function($0,$1) { 
 
    if ($1) res.push($1); 
 
}); 
 
console.log(res);

圖案的詳細資料

  • ^ - 一行的開始(如m多改性劑使得^匹配線開始)
  • [^\S\r\n]* - 0+水平空格
  • #.* - 一個#和任何0+字符到一個行的末尾
  • | - 或
  • \b - 領先字邊界
  • - 第1組捕獲a,數字,一個b
  • \b - 尾隨字邊界。

replace()方法中,使用了回調,其中res數組僅填充了組1的內容。

+0

哇...非常感謝你...這是更有幫助..所以這是不可能的只是正則表達式..這將適合我的代碼情況。 – Vikash

+0

你不能跳過整行並用1個匹配的JS正則表達式匹配單個單詞。在PCRE中,這很容易。 –

+0

好..是啊..那是約束,我認爲js會通過regex來解決一些問題..而我將使用你的解決方案。 – Vikash

1

我建議使用2章第例如: 第一寄存器EX取非散列行:

^[^#][a\db\s]+ 

然後另一個REG前用於讀取各個單詞(從每行):

^a\db\s 
相關問題