[英]Regex: Match a character that is unmatched in a negated set only a certain number of times at the end of a string
在 Javascript 中,如果括號“)”在字符串末尾重復出現兩次,我想匹配(即添加到結果中),如果出現一次或兩次以上,則不匹配。 答案可能是從否定集合中刪除括號並“以不同的方式在其他地方使用它”——因此,我嘗試調整這種方法,但沒有任何成功。 雖然,我的正則表達式相當大而且很棘手,所以某些正則表達式“變得無用”——從我的經驗中可以看出,因為我對正則表達式沒有那么豐富的經驗。 所以,這是我的正則表達式:
/(?<?[a-zA-Z/]+)(https:?),\/{1?2}[a-zA-Z]\S*(?<=\){2}|(:<=[^;"'\]),,]))/g
看,我實現這一目標的努力是“成功的一步”,因為我當前的正則表達式在出現兩次時匹配括號,但在出現一次時不匹配,但如果出現兩次以上則繼續。 舉個例子:
示例 URL: https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts"))
結果:
[...] &nav=(("fonts")
- 不匹配")
- 好
[...] &nav=(("fonts"))
- 匹配))
- 好
[...] &nav=(("fonts"))) [...]
- 匹配)))
但在否定集上不包含不需要的字符 - (有點)不好
..等等...
我嘗試了不同的外觀和量詞......“混合”和方式,並且沒有比我之前編寫的正則表達式取得更好的成功。
順便說一句,我不想在正則表達式上使用開始( ^
)和結束( $
)字符——因為我在大腳本和變量腳本中使用它,因此我使用的是全局上下文; 可能我在這個陳述上是錯誤的,所以如果有必要請糾正我——但如果他們是必需的——因為我已經嘗試過更簡單的正則表達式——我不會太在意。
正如Wiktor Stribiżew所要求的,這是帶有上述示例的正則表達式的預期行為:
預期成績:
https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts")
- 應該匹配https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts
https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts"))
- 應該匹配所有的 URL (原始 URL)
https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts")))
- 應該匹配https://docs.google.com/picker?protocol=gadgets [...] &nav=(("fonts
看來你可以使用
(?<![a-zA-Z/])(?:https?:)?\/{1,2}[a-zA-Z]\S*(?:[^\s:"'\\)]|(?<!\))\)\)(?!\S))
或者,要考慮任何非單詞字符,
(?<![a-zA-Z/])(?:https?:)?\/{1,2}[a-zA-Z]\S*(?:\b|(?<!\))\)\)(?!\S))
請參閱正則表達式演示。 詳情:
(?<![a-zA-Z/])
- 如果當前位置左側有一個字母或/
則匹配失敗(?:https?:)?
- 可選http:
或https:
字符串\/{1,2}
- 一個或兩個/
s[a-zA-Z]
- 一個字母\S*
- 零個或多個非空格(?:\b|(?<?\))\)\)(?!\S))
- 一個單詞邊界或一個))
字符串,前面沒有另一個)
並且沒有直接跟非空白字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.