簡體   English   中英

正則表達式刪除所有前導和尾隨特殊字符?

[英]Regex remove all leading and trailing special characters?

假設我在 javascript 中有以下字符串:

&a.b.c. &a.b.c& .&a.b.c.&. *;a.b.c&*. a.b&.c& .&a.b.&&dc.& &ê.b..c&

我想從所有單詞中刪除所有前導和尾隨特殊字符(任何不是字母數字或另一種語言的字母)。

所以字符串應該看起來像

a.b.c a.b.c a.b.c a.b.c a.b&.c a.b.&&dc ê.b..c

注意字母數字之間的特殊字符是如何留下的。 最后一個ê也被留下了。

這個正則表達式應該做你想做的。 它尋找

  • 行首,或第 1 組中捕獲的某些空格(^| +)
  • 一些符號字符[!-\\/:-@\\[-``\\{-~]*
  • 在第 2 組中捕獲的最少數量的非空格字符([^ ]*?)
  • 一些符號字符[!-\\/:-@\\[-``\\{-~]*
  • 后跟一個空格或行尾(使用正向前瞻) (?=\\s|$)

匹配項僅替換為第 1 組和第 2 組(符號之間的間距和字符)。

 let str = '&a.bc &a.bc& .&a.bc&. *;abc&*. ab&.c& .&a.b.&&dc.& &ê.b..c&'; str = str.replace(/(^| +)[!-\\/:-@\\[-`\\{-~]*([^ ]*?)[!-\\/:-@\\[-`\\{-~]*(?=\\s|$)/gi, '$1$2'); console.log(str);

請注意,如果您想單獨保留一串標點符號(例如在Apple & Sauce ),您應該更改第二個捕獲組以堅持存在一個或多個非空格字符( ([^ ]+?) ) 而不是 none 並在標點字符的初始匹配后添加前瞻以斷言下一個字符不是標點符號:

 let str = 'Apple &&& Sauce; -This + !That!'; str = str.replace(/(^| +)[!-\\/:-@\\[-`\\{-~]*(?![!-\\/:-@\\[-`\\{-~])([^ ]+?)[!-\\/:-@\\[-`\\{-~]*(?=\\s|$)/gi, '$1$2'); console.log(str);

a-zA-Z\À-\ſ用於捕獲所有有效字符,包括變音符號。

以下是用於捕獲每個單詞的單個正則表達式。 邏輯是它將查找第一個有效字符作為捕獲組的開始,然后將空格字符或字符串終止符之前的最后一個無效字符序列作為捕獲組的結束。

 const myRegEx = /[^a-zA-Z\À-\ſ]*([a-zA-Z\À-\ſ].*?[a-zA-Z\À-\ſ]*)[^a-zA-Z\À-\ſ]*?(\\s|$)/g; let myString = '&a.bc &a.bc& .&a.bc&. *;abc&*. ab&.c& .&a.b.&&dc.& &ê.b..c&'.replace(myRegEx, '$1$2'); console.log(myString);

像這樣的事情可能會有所幫助:

 const string = '&a.bc &a.bc& .&a.bc&. *;abc&*. ab&.c& .&a.b.&&dc.& &ê.b..c&'; const result = string.split(' ').map(s => /^[^a-zA-Z0-9ê]*([\\w\\W]*?)[^a-zA-Z0-9ê]*$/g.exec(s)[1]).join(' '); console.log(result);

請注意,這不是一個單一的正則表達式,而是使用了 JS 幫助代碼。

粗略解釋:我們先把字符串拆分成一個字符串數組,用空格隔開。 然后我們通過去除前導和尾隨特殊字符來轉換每個子字符串。 我們通過使用[^a-zA-Z0-9ê]*捕獲所有特殊字符來做到這一點,因為前導^字符它匹配列出的字符之外的所有字符,因此所有特殊字符。 在這兩組之間,我們使用([\\w\\W]*?)捕獲所有相關字符。 \\w捕捉單詞, \\W捕捉非單詞,所以\\w\\W捕捉所有可能的字符。 通過附加? * ,我們將量詞*設為惰性,以便該組在下一個捕獲尾隨特殊字符的組捕獲某些內容時立即停止捕獲。 我們還以^符號開始正則表達式並以$符號結束它以捕獲整個字符串(它們分別將錨點設置為字符串的開頭結尾)。 使用.exec(s)[1]我們然后在子字符串上執行正則表達式並在我們的轉換函數中返回第一個捕獲組結果。 請注意,如果子字符串不包含正確的字符,則這可能為 null。 最后我們用空格連接子串。

暫無
暫無

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

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