2013-09-25 49 views
0

我有這樣正則表達式匹配文本只包含空格和BR標籤

     <br />      <br />    <br /> 

或有時

  <br />   <br /> 

  <br /> 

字符串如何檢查是否字符串只在Javascript中包含空白和br? EX: 如果(/ \ s * /測試(內容)){ }

+1

我想象它是微不足道的:'/ ^(\ s | ] *>)+ $ /我' –

回答

2

有要檢查並允許,空格和<br />,使顯示的交替,允許零次或多個重複,在兩個固定兩件事情結束:

if(/^(?:\s|<br \/>)*$/.test(content)){ } 

這意味着:

  • ^ - 輸入
  • (?:...)的開始 - 非捕獲組
  • \s - 任何單個空白字符
  • | - 交替,允許東西在它
  • <br \/>任一側 - 匹配文字字符串<br />(請注意,我們必須轉義/
  • * - 零個或更多的是去之前的東西,非捕獲組
  • $ - 輸入結束

如果有一個機會,在標籤內的空間或斜線可能不存在,或空間可以被重複,那麼:

if(/^(?:\s|<br *\/?>)*$/.test(content)){ } 

添加*的空間讓後會有零,或多個,空格;在固相線(/)之後加上?讓它在那裏(一次)或不在。

注意:以上不允許在br標記的任何屬性,例如, <br class="foo" /><br data-foo="bar"/>等。它也匹配空字符串。

要允許屬性,但繼續匹配空字符串:

if(/^(?:\s|<br[^>]*>)*$/.test(content)){ } 
// Change ----^^^^ 

爲了允許屬性和禁止空字符串(必須至少有一個空格,或一個br標籤):

if(/^(?:\s|<br[^>]*>)+$/.test(content)){ } 
// Change ------- ---^ 
+0

它的作品就像一個魅力。感謝這麼多 –

+0

@NTThái:很高興幫助! –

-1
"^\s*<br />$" 

爲您提供了空白的任何數量的線(包括進入和標籤!),並以 「

結束
2

讓我們以此字符串爲例:

var input = " <br /> "; 

首先我寧願從輸入中刪除所有的空格,這樣我們就不必擔心使得正則表達式檢查這些:

var testData = input.replace(/\s/g, ''); 
//in this example, testData will now be "<br/>" 

的可以執行一個正則表達式來檢查只有<br/>存在:

var regex = /^(?:<br\/>)*$/; 
var isValid = regex.test(testData); 

Here is a working example

+0

FWIW:不需要替換,或者在最終測試中用於捕獲組。 –

+0

@ T.J.Crowder:實際上捕捉組似乎是必需的(嘗試從我的小提琴鏈接中刪除它)。我知道替換是不需要的,我只是討厭使用混亂的輸入,並且我喜歡儘可能小地保留我的正則表達式 - 或者儘量避免使用它們 – musefan

+1

@ musefan:您需要*組*,但不是捕獲組,所以'*'適用於整個事情:'var regex =/^(?: )* $ /;'[fiddle](http://jsfiddle.net/jD2V4/1/) (捕獲小組在理論上爲rex引擎做了更多的工作,儘管我希望'test'能優化它們!)。 –