簡體   English   中英

Javascript正則表達式 - 限制有效字符數

[英]Javascript Regular Expression - Limit number of valid characters

我正在學習javascript中的正則表達式,我認為有些東西我不知道。

我正在使用一個示例,我正在嘗試從字符串中提取有效的電子郵件地址。 我收到了有效的電子郵件,但我也收到了無效的電子郵件。 這是代碼:

var teststring = "This is my test string with a valid email: this@that.com,
             and an invalid email: this@broken.1. Pull only the valid email.";

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+.[A-Za-z]{2,3}/g)

當我運行匹配方法時,我收到有效的電子郵件“this@that.com”,並返回無效的電子郵件“this@broken.1”。

我認為最后一個方括號末尾的{2,3}應該指定括號內的特定字符搜索只有在它們包含2到3個條件實例時才有效,那么為什么破壞的電子郵件與最后一個點返回后只是“1”?

我還應該補充一點,我完全理解這不是一個完整的電子郵件驗證表達式。 這對我來說純粹是一個試圖理解的正則表達式問題。 我正在尋找一個明確的答案,但無法找到我正在尋找的確切內容。

謝謝

. 將匹配任何角色。 匹配實際. 你需要\\.

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+\.[A-Za-z]{2,3}/g)

你需要逃脫最后一次. 否則,它意味着“匹配任何字符”,因此表達式正在捕獲這些塊:

this
@
brok
en

嘗試:

teststring.match(/[A-Za-z0-9_+.-]+@[A-Za-z0-9]+\.[A-Za-z]{2,3}/g)

由於您正在尋找大寫或小寫字母,因此可以通過使其不區分大小寫來簡化搜索。 正則表達式末尾的/ g使匹配成為全局(即返回所有這些匹配); 你可以使用/ i,如果你只想要一場比賽,但你不關心案例。 例如,

"CaSe InSeNsItIvE iS cOoL; I lOvE cAsEs".match(/case/i)

返回單元素數組[“CaSe”]。 要獲得所有不區分大小寫的匹配項,只需使用/ gi:

"CaSe InSeNsItIvE iS cOoL; I lOvE cAsEs".match(/case/gi)

返回[“CaSe”,“cAsE”]

您的查詢可以縮短為

teststring.match(/[A-Z0-9_+.-]+@[A-Z0-9]+\.[A-Z]{2,3}/gi)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM