[英]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”在其他任何內容之前都保留在“特殊單詞”組中。
可以在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
它們replace
為empty string
,這是簡單的正則表達式:
/:\w+/g
然后replace
為empty string
。 現在您有了一個字符串,可以使用此正則表達式進行解析:
/([ ]+)|([a-z]*)/g
這是您第二個正則表達式的簡化版本,因為禁止的單詞已經消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.