簡體   English   中英

標記中的JavaScript正則表達式

[英]Javascript regex for tag in comments

我一直在開發一個Web應用程序,用戶可以在其中評論和回復評論,這使用了標記系統。 用戶使用他們的名字來標記,這個名字可以包含更多單詞,所以我決定標記這些:

&& John Doe &&

因此,注釋可能如下所示:

&& John Doe &&,您確定&& Alice Johnson &&不見了嗎?

我正在嘗試編寫正則表達式以匹配string.replace()javascript函數中的用法,因此正則表達式必須匹配字符串中的每個標記。

到目前為止,我有:

^&&.+{2, 64}&&$

這是行不通的,所以我確定有些問題,以防萬一您不明白我的意思,上面的正則表達式應該匹配這樣的字符串:

&& anythingbetween2and64charslong &&。

提前致謝!

(.*?)&&表示“直到&&之前的一切”:

 var before = document.getElementById("before"); var after = document.getElementById("after"); var re = /&&(.*?)&&/g, b = "<b>$1</b>"; after.innerHTML = before.textContent.replace(re, b); 
 <p id="before">&&John Doe&&, are you sure that &&Alice Johnson&& is gone?</p> <p id="after"></p> 

嘗試&{2}.{2,64}&{2}

如果要在匹配組之間添加括號之間進行匹配

&{2}(.{2,64})&{2}

現在你只檢查整行匹配的字符串

^字符表示行的開頭$字符表示行的結尾\\A表示整個字符串的開頭\\Z表示整個字符串的結尾

這是您需要的:

str.match(/&&.{2,64}?&&/g)
  • 您需要從開頭和結尾刪除^$ ,因為它們與字符串的開頭和結尾匹配。
  • 在末尾添加/g標志,以便所有匹配項都匹配
  • ? {}使匹配變得非貪婪之后,因此它將匹配“ &&”之間的最短字符串,而不是最長的字符串(將為您提供“ && John Doe &&”而不是“ && John Doe &&,您確定&& Alice Johnson &&”)

閱讀有關貪婪的內容: 與Star和Plus重復

此正則表達式將匹配&&符號之間的任何Unicode字母:

str.match(/\&\&[\p{L}\p{N}]+(?:\s+[\p{L}\p{N}]+)*\&\&/g);

這里,

\\p{L} ->任何unicode字母,名稱可以是任何語言和字母
\\p{N} ->任何Unicode數字
[\\p{L}\\p{N}]+ ->由unicode字母或數字構成的單詞
\\s+ ->單詞之間的間隔,最大3個長度
[\\p{L}\\p{N}]+(?:\\s+[\\p{L}\\p{N}]+)* ->所有單詞組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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