[英]Unable to find a string matching a regex pattern
在嘗試提交表單時,javascript正則表達式驗證始終被證明對於字符串是錯誤的。
正則表達式:- ^(([a-zA-Z]:)|(\\\\\\\\{2}\\\\w+)\\\\$?)(\\\\\\\\(\\\\w[\\\\w].*))+(.jpeg|.JPEG|.jpg|.JPG)$
我已經嘗試跟隨它
abc.jpg,
abc:.jpg,
a:.jpg,
a:asdas.jpg,
什么字符串可以匹配此正則表達式?
如果刪除轉義級別,則實際正則表達式為
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.jpeg|.JPEG|.jpg|.JPG)$
在^
之后,啟動第一個管道(([a-zA-Z]:)|(\\\\{2}\\w+)\\$?)
,該管道與一個字母,一個冒號或兩個反斜杠以及一個或多個單詞字符相匹配,后面跟一個可選的文字$
。 內部使用了一些不必要的括號。
第二部分(\\\\(\\w[\\w].*))+
與反斜杠匹配,后跟兩個單詞字符\\w[\\w]
,看起來很奇怪,因為它等效於\\w\\w
(不需要第二個\\w
字符類。 后跟任意數量的任何字符。 這整個事情一次或多次。
最后一部分(.jpeg|.JPEG|.jpg|.JPG)
可能忘記了轉義點以匹配文字。 \\.
應該使用。 這部分可以簡化為\\.(JPE?G|jpe?g)
。
它會匹配像
A:\\ 12anything.JPEG
\\\\ 1 $ \\ anything.jpg
在regex101上玩 。 更好的可讀性可能是
^([a-zA-Z]:|\\{2}\w+\$?)(\\\w{2}.*)+\.(jpe?g|JPE?G)$
另請閱讀regex101上的說明以了解任何模式,這很有幫助!
正則表達式不會因為$?
而與任何內容匹配$?
在字符串的中間。
顯然使用可選修飾符?
末尾的字符串符號$
不正確(如果將其粘貼在https://regex101.com/上 ,確實會給您一個錯誤)。 如果javascript解析器忽略該錯誤並保持正則表達式不變,則這仍然意味着您將在應該繼續的字符串中間匹配一個結束字符串。
未轉義的字符應該與\\$
(美元符號)匹配,但是在編寫時它將不起作用。
如果您希望不惜任何代價接受您的字符串,則可以使用Firebug或類似的開發人員工具並在javascript代碼中編輯字符串(這是假定沒有服務器端檢查的前提,並且也沒有錯)。 如果忽略$?
那么匹配的字符串將是\\\\\\\\w\\\\\\\\ww.jpg
(但是由於。 \\\\\\\\w\\\\\\\\ww.jpg
轉義,即使\\\\\\\\w\\\\\\\\ww%jpg
是匹配項)
當然,我寫這個答案是假設轉義確實是您在問題中顯示的轉義。 如果您需要為正確轉義的一個^(([a-zA-Z]:)|(\\\\{2}\\w+)\\$?)(\\\\(\\w[\\w].*))+(\\.jpeg|\\.JPEG|\\.jpg|\\.JPG)$
則可以使用此工具找到一個http://fent.github.io/randexp.js/ (盡管它會找到奇怪的匹配)。 匹配的模式是c:\\zz.jpg
如果您只是想尋找一個正則表達式來匹配您所到達的位置,請繼續進行測試:
(\w+:?\w*\.[jpe?gJPE?G]+,)
那應該完全符合您的需求。 當然,如果需要,請在最后刪除可選的逗號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.