簡體   English   中英

找不到與正則表達式模式匹配的字符串

[英]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.

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