簡體   English   中英

正則表達式 - 如果組以javascript中的字符串開頭,則不匹配組

[英]Regex - Don't match a group if it starts with a string in javascript

我正在努力使用一些沒有典型lookbehind選項的javascript中的正則表達式,如果它前面沒有字符串,則只匹配一個組:

(^|)(www\.[\S]+?(?= |[,;:!?]|\.( )|$))

所以在下面

hello http:/www.mytestwebsite.com is awesome

我正試圖檢測www.mytestwebsite.com是否先於

/

如果它是我不想匹配,否則匹配。 我嘗試使用前瞻但它看起來與我已經擁有的前瞻性相矛盾。

我一直在玩(?!&#x2f)在不同的地方,沒有成功。

(^|)((?!&#x2f)www\.[\S]+?(?= |[,;:!?]|\.( )|$))

如果匹配在前面,則前瞻不匹配

由於JS缺乏外觀 ,是實現目標的唯一途徑
是匹配那些包含錯誤/ 同樣。

這是因為前瞻不會推進當前位置。
只有可消耗文本的匹配才能提升位置。

但是,一個好的解決方法一直是將錯誤的文本作為一個選項
在正則表達式內。 你會在它周圍放置一些捕獲組,然后進行測試
比賽組。 如果匹配,請跳過,繼續下一場比賽。

這需要坐在一個while循環中檢查每個成功的匹配。
在下面的正則表達式中,如果組1匹配,則不要存儲組2 url,
如果沒有,請存儲組2 url。

(/)?(www\\.\\S+?(?= |[,;:!?]|\\.( )|$))

格式:

 ( &\#x2f; )?                  # (1)
 (                             # (2 start)
      www\. \S+? 
      (?=
           &\#x20;
        |  [,;:!?] 
        |  \.
           ( &\#x20; )                   # (3)
        |  $ 
      )
 )                             # (2 end)

另一個選擇(我已經完成零性能測試)將使用帶有正則表達式的string.replace()和作為第二個參數的回調。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

然后,在replace函數內部,使用傳遞給回調的offset參數(請參閱上面的文檔)預先添加/追加您不想匹配的非法/字符(參見上面的文檔),您可以確定每個匹配,它的位置和確定是否更換文本。

暫無
暫無

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

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