簡體   English   中英

解析器(js)的正則表達式后向替代

[英]regex lookbehind alternative for parser (js)

早上好

(我看到這個主題有很多答案,但找不到合適的答案)

我正在用javascript寫一個小解析器,它將文本切成這樣的部分:

var tex = "hello   this :word is apart"

var parsed = [
  "hello",
  "   ",
  "this",
  " ",
  // ":word" should not be there, neither "word"
  " ",
  "is",
  "apart"
]

完美的正則表達式是:

/((?!:[a-z]+)([ ]+|(?<= |^)[a-z]*(?= |$)))/g

但是,正如我所讀到的那樣,它具有積極的后盾 ,正如我在2018年僅在javascript中實現的那樣,所以我猜想許多瀏覽器兼容性沖突......我希望它至少具有一點兼容性 ...

我考慮過 :

  • 嘗試捕獲組(?:),但是在...之前會占用空間。
  • 只是刪除空格檢查,但是“:word”是以“ word”的形式出現的
  • 解析文本2次,一次為單詞,另一次為空格,但我擔心將它們按正確的順序放置會很麻煩

明白了,我需要單詞和所有空格,並排除一些單詞。 我對其他方法持開放態度,例如不使用正則表達式。

最后的選擇

刪除空格檢查並按正確的順序組織我的整個正則表達式,祈禱“:word”在其他任何內容之前都保留在“特殊單詞”組中。

我的問題

可以在javascript中工作,並且可靠嗎?

我試過了

/(((:[a-z]+)|([ ]+)|([a-z]*))/g

https://regexr.com/中似乎可以正常工作,在每種情況下都可以工作嗎?

您說過您可以使用非正則表達式解決方案,但我可以給您一個包括這兩種解決方案的解決方案。 由於您不能依靠幕后支持,因此只需捕獲所有內容並過濾掉不需要的內容即可,單詞后跟冒號。

 const text = 'hello this :word is apart'; const regex = /(\\w+)|(:\\w+)|(\\s+)/g; const parsed = text.match(regex).filter(word => !word.includes(':')); console.log(parsed); 

我將使用2個正則表達式,第一個與單詞匹配,您不想要,然后replace它們replaceempty string ,這是簡單的正則表達式:

/:\w+/g

然后replaceempty string 現在您有了一個字符串,可以使用此正則表達式進行解析:

/([ ]+)|([a-z]*)/g

這是您第二個正則表達式的簡化版本,因為禁止的單詞已經消失了。

暫無
暫無

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

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