2011-05-12 30 views
0

在我開始之前,我只想說我對Regex是全新的,所以請對我溫柔。一般有關正則表達式的任何意見將不勝感激。Javascript:正則表達式代碼不會執行

我已經寫了下面的代碼

var str = "<blah blah more <b>test</b>>"; 

var reg1 = "<(?!b>)(?!/b>)"; 
str = str.replace(new RegExp(reg1), "&lt;"); 

var reg2 = ">(?<!b>)(?<!/b>)"; 
str = str.replace(new RegExp(reg2), "&gt;"); 

alert(str); 

我已經使用http://regexr.com?2toe2檢查正則表達式的,它不會是我想要它是匹配任何<>,但只有當他們不html標籤。 「我現在只覆蓋了

現在,如果您運行此代碼,http://jsfiddle.net/ashburlaczenko/JdATY/9/警報永遠不會執行。我在第一次替換後發出警報,顯示錯誤是在第二階段。

任何人都可以幫助我嗎?請記住這些正則表達式是我的第一次嘗試。

預先感謝您。

編輯:

<blah blah more <b>test</b>><another <b>blah</b> blah <b>test</b>> 

應該成爲

&lt;blah blah more <b>test</b>&gt;&lt;another <b>blah</b> blah <b>test</b>&gt; 

希望這是更清晰。

+0

看看這個網站:http://rubular.com,它在構建正則表達式時非常有用。 – 2013-07-28 07:52:39

回答

1
function escapeHtml($0, $1, $2, $3) 
{ 
    var result = $1 == '<' ? '&lt;' + $2 + $3 : $1 + $2 + '&gt;'; 
    return result; 
} 

str = str.replace(/([<>])([^<>]*?)(\1)/g, escapeHtml); 
str = str.replace(/^([^<]*?)>/, '$1&gt;'); 
str = str.replace(/<([^>]*?)$/, '&lt;$1'); 

這一個適用於給出的例子。

。第一替代執行以下操作:

  • 它看起來對於沒有在他們之間<>如的<>重複<...<>...>
  • 第一個支架是$ 1,中間的文字是$ 2,最後一個支架是$ 3。
  • 如果$ 1是<,則$ 1被轉義,否則$ 3被轉義。

如果它發生在字符串的開頭附近沒有收到一份<第二替代逃逸>

第三個替換轉義<如果它出現在字符串末尾附近,而後面沒有>

+0

這是適用於這個例子,但我不是很清楚我需要什麼。正則表達式應該替換所有<除<,除非它是html標籤的一部分,現在我們可以說唯一有效的html標籤是。這應該與>相同。希望這更清楚。 – 2011-05-12 21:24:38

+0

另外,你知道vbscript正則表達式是否可以包含後視? – 2011-05-12 21:27:30

+0

我甚至不知道vbscript是否有regexps對不起!你有一個更大的例子,所以我可以看到我的第二個錯誤。 – 2011-05-12 21:57:41

2

JavaScript不支持正則表達式中的後代斷言。你可以用this blog post的一點點幫助來模仿它,但它還不算太好。

+1

是的,這也是一個恥辱。 – jimbojw 2011-05-12 19:37:31

+0

謝謝你的回答。你知道我怎麼能寫這個而不使用後顧斷言? – 2011-05-12 19:38:29