簡體   English   中英

沒有被字母數字字符包圍的單詞的正則表達式

[英]Regex for word not surrounded by alphanumeric characters

我想要一個匹配沒有被任何字母數字字符包圍的特定單詞的正則表達式。 我的想法是在之前和之后包括一個否定:

[^a-zA-Z\d]myspecificword[^a-zA-Z\d]

所以它會匹配:

myspecificword
_myspecificword_
-myspecificword

並且不匹配:

notmyspecificword
myspecificword123

但是這個簡單的正則表達式不會單獨匹配這個詞,除非它前面有一個空格:

myspecificword   // no match
 myspecificword  // match

使用標志“gmi”並使用 JavaScript 進行測試。 我究竟做錯了什么? 不應該就這么簡單嗎?

https://regex101.com/r/BCkbVQ/3

嘗試使用:

(?<![^\s_-])myspecificword(?![^\s_-])

這表示匹配myspecificword當它在兩側被輸入的開始/結束、空格、下划線或破折號包圍時。

演示

不需要空格,而是需要匹配[^a-zA-Z\\d]任何符號。

你應該使用:(演示

(?:^|[^a-zA-Z\d])myspecificword(?:[^a-zA-Z\d]|$)

主要好處是支持所有 Regexp 解析器。

如果您的意思是“沒有被_以外的字母數字包圍(並且在您嘗試的正則表達式中,您似乎願意匹配不是字母或數字的任何內容),那么以下任何一項都應該是可以接受的:

'myspecificword'
'_myspecificword_'
' myspecificword '
'-myspecificword-'
'(myspecificword)'

正則表達式應該是:

(?<![^_\W])myspecificword(?![^_\W])

 let tests = ['myspecificword', '_myspecificword_', ' myspecificword ', '-myspecificword-', '(myspecificword)', 'amyspecificword', '1myspecificword' ]; let regex = /(?<![^_\\W])myspecificword(?![^_\\W])/; for (let test of tests) { console.log(regex.test(test)); }

例如,“接受的”答案將不匹配(myspecificword)

這個問題的標題是

沒有被字母數字字符包圍的單詞的正則表達式

其他答案都解決了一個不同的問題(很可能就是這個問題):

單詞的正則表達式前面和后面都沒有字母數字字符

我將分別將這些陳述稱為#1 和#2。

如果指定的單詞是'cat'並且字符串是'9cat' ,則'cat'沒有字符串中的字母數字字符包圍,因此與 #1 匹配,但與 #2 不匹配。

對於#1,可以使用正則表達式:

/cat(?!\p{Alpha}|(?<!\p{Alnum})cat/

(“匹配'cat'后面沒有Unicode字母數字字符或'cat'前面沒有Unicode字母數字字符”),盡管更容易測試否定:

/(?<=\p{Alpha}cat(?<=\p{Alnum})/

如果字符串與此正則表達式不匹配,則測試通過。

對於解釋#2,正則表達式是:

/(?<!\p{Alpha}cat(?!\p{Alnum})/

我認為這會奏效:

/[^a-z0-9]?myspesificword[^a-z0-9]?/i

暫無
暫無

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

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