2013-02-18 194 views
0

我正在被使用replaceText插件包網頁上的所有字(和多餘的空格/標點)在span標記一個書籤。該插件遍歷頁面上的所有文本節點,並允許我調用一個函數來操作每個頁面的內容,而不會破壞頁面上的任何其他HTML格式。 (這些都不是問題,我很確定,但我覺得上下文可能有用)。我對該函數的調用看起來是這樣的,供大家參考:如何將正則表達式中的「* /」解釋爲塊註釋?

$("body *").replaceText(/\S+\s*/g, spanWrap); 

的問題是最好的正則表達式我已經找到了我的目的,分離這些詞 - /\S+\s*/g - 包含結束字符塊註釋(「* /」)。如果我在Notepad ++中的.js文件之前添加塊註釋的開頭幾行,我可以看到語法突出顯示器正在讀取它。

當我跑我的書籤,大多數網站似乎與這個問題沒有任何問題和書籤按預期工作。然而,一些網站,其原因我無法預測,拋出了一個「Uncaught SyntaxError: Unexpected token <」錯誤和書籤中斷/停止運行。如果我改變我使用的replaceText功能的正則表達式來一個我一直在使用的書籤的早期版本 - /\b(\S+?)\b/g - 同時改變絕對沒有其他的書籤,這些網站停止給錯誤和書籤工作得很好,所以我必須相信它是由於引起它的塊註釋閉包的存在。

對於我想要做的書籤的目的,雖然,它的表達與該評論封閉 - /\S+\s*/g - 作品很多,比另一個,它不會標點符號更好和白色空間。但是,如果我的小書籤在某些網站上沒有中斷,我也很喜歡它。

那麼,有沒有任何辦法解決的正則表達式,我有那麼它沒有被讀作評論,或者你可以建議一個可以與不同的語法什麼的,也許做同樣的工作嗎? (如果它不是來自我的問題很明顯,我有多麼的正則表達式的工作,並通過複製他們從其他堆棧溢出的問題/解答得到了我使用的是在這個例子中,那些最起碼的理解)

+0

我懷疑任何JavaScript引擎解釋這個序列作爲註釋的結束。那真的很奇怪。 – 2013-02-18 14:46:05

+0

什麼是'spanWrap'? – Anirudha 2013-02-18 14:46:48

+0

@FelixKling - 我會感到驚訝,如果任何沒有:http://jsbin.com/ocomuy/1/ – Quentin 2013-02-18 14:47:17

回答

2

使用長版本:

var regex = new RegExp("\\S+\\s*", "g"); 
$("body *").replaceText(regex, spanWrap); 

(編輯:轉義字符串中的反斜槓)

+0

這種方法看起來非常聰明,當我看到它時,我在前額上打了一下,但是我試了一下,在簡短版本打破的頁面上運行,它的功能不同(即短版本在span標籤中包裝單詞(包括標點符號和周圍空白),而這隻對少數幾個單詞這樣做) – JJohnson 2013-02-18 15:17:23

+0

這裏是一個稍微更清晰的上述評論版本:這種方法看起來非常聰明,當我看到它時,我在前額上打了一下自己,但我嘗試了這一點,當它在短版本的網頁上運行時,它的功能並不一樣(即短版本觸發了我的功能,可以將每個單詞(包括標點符號和周圍的空格)包裹在span標籤中,而這僅僅是爲了一些工作ds在頁面上並且保持最大的不變) – JJohnson 2013-02-18 15:23:09

+0

@JJohnson:這看起來很奇怪。我會試着弄清楚爲什麼會發生這種情況(它不應該......)。與此同時,您可以使用此頁面來測試正則表達式:http://regexpal.com/ – marsze 2013-02-19 07:47:21

0

所以,有沒有一種方法來修復我有正則表達式,以便它不被閱讀爲一個評論

我想不出任何理智。 (您可以通過使用RegExp構造,打破正則表達式分成兩個字符串,然後拼接他們重新走到一起的正則表達式得到的效果,我不會,雖然稱之爲理智。)

我會使用一系列在線評論//而不是塊評論。