[英]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.