2016-03-14 85 views
2

驗證用戶輸入時,我使用正則表達式來檢查每行的開頭(實際上包含的內容是否會跳過雙空格),總會有一個在任何其他字符之前設置括號內的內容。有多種變化左右擺弄之後,這裏就是我想出的最簡單的版本,沒有檢查每行的第一個單詞是否包含特定字符

var regex = new RegExp('^\\([^)]+\\).*?$', 'm'); 

預期的結果是再次進行測試,如情況屬實:

(測試)的任何\ N(另一個測試)再次...無論

(測試)whateve河\ n \ n(另一個測試)再次...無論

如果字符串中的任何行不以(開始,有括號內的至少一個字符,然後由)面前關閉括號後的任何數量的內容,都應該失敗;唉,我上面的表達會忽略任何檢查第一行的任何行。如果我的格式不正確,例如(test) whatever\nthis) should return false,它仍會在.test()上返回true。

一些有效的匹配可能包括:

(測試)通過

(測試)合格\ n(也)通過

(再次)通過\ n \ n(也)通\ n(我們)可以整天這樣做

(There)可以\ n(是)\ n(新行)的任何\ n(金額)爲\ n \ n \ n \ n(長)每個\ n(行)有\ n(內容)開始\ n(帶有一套)括號。 \ n(有)\ n(有)\ n(有)唯一的\ n(例外)是\ n(嚴格執行)的\ n(不是)\ n(不)打開和關閉括號)在每行

,應該在一個.test()返回false一些無效的比賽開始時包括:

都能跟得上

也都能跟得上

(無右括號=都能跟得上

都能跟得上對於上述對面)

(沒錯至今)實際上.... \ nNope

\ n個大碗(沒了!)

)猜測?

()否良好

+1

也許'/^(?:\([^)]+\).*[\r\n]*)+ $ /'?或['/^\([^)]+\).*(?:[\r\n]+\([^)]+\).*)*$/'](https://regex101。 COM/R/cP4zW7/1)。我建議使用文字正則表示法。 –

+1

還是你的意思['^(?!\([^)] + \))。*'](https://regex101.com/r/cP4zW7/2)? –

+1

添加了一些通過/失敗的例子。 – Scott

回答

1

爲了驗證每一行與(...)開始多行文本,你可以使用這個表達式:

/^(?:\(.+?\).*[\r\n]*)+$/ 

RegEx Demo

這將失敗的比賽,如果任何行開始沒有(...)模式。

+0

另一種選擇是使用['!/ ^(?!\([^)\ n] + \)| \ s * $)/m.test(input)'](https://regex101.com/r/vY4hA3/3)**(注意在開始時使用否定)** – anubhava

0

您是不是要找

var regex = /^(?:(?:^|\r*\n)(?:[\t ]*|\s*\([\t ]*(?:[^\(\)\s][\t ]*)+\)[^\r\n]*))*$/; 

Regular expression visualization

Test it live on Debuggex

相關問題