簡體   English   中英

正則表達式排除以井號標簽開頭的單詞

[英]Regex to exclude words beginning with hash tag

我正在尋找幫助,以找出一個正則表達式,該表達式將與票證號碼單詞(任意數量的字符后跟數字)匹配,但不匹配以#SN-開頭的單詞。 有任何想法嗎?

示例字符串:

A string with has ref like #SN-INC0000058 and simple mention like INC0000059.

正則表達式匹配項: INC0000059

我目前停留在此細分,該匹配與“#SN-”之后的數字匹配,而不是排除整個單詞/字符串。 我懷疑-被視為斷字...任何想法?

/(?!#SN-)([A-Z]+[0-9]+)\b/g

https://www.regexpal.com/?fam=99443

由於Javascript正則表達式沒有后向功能,因此無法通過簡單的模式捕獲所需內容。 但是,在替換上下文中,您可以使用函數作為替換參數和一種模式來系統地嘗試捕獲不需要的零件,從而輕松地處理此問題:

var result = yourstr.replace(/(#SN-)?\b[A-Z]+[0-9]+\b/g, function(m,g1) {
    return g1 ? m : 'yourreplacement';
});

當定義了捕獲組1時,該函數返回整個匹配項,否則返回替換字符串。

請注意,在函數內部,不能將$&$1..$n占位符用於整個匹配或捕獲組。 您必須使用功能參數來計算它們。


只是更加嚴格,如果在目標之前描述了所有可能性,也可以不使用回調函數來完成操作,但這很痛苦,而且效率不高,因為模式以交替開頭:

var result = yourstring.replace(/(^|[^-]|(?:[^N]|^)-|(?:[^S]|^)N-|(?:^|[^#])SN-)\b[A-Z]+[0-9]+\b/g, '$1yourreplacement');

暫無
暫無

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

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