我试图编写一个正则表达式来将以下字符串解析为三个不同的部分。这是我正在写的一个高亮引擎:Javascript lookahead正则表达式
“\ n在解决方案后可用。”
我有一个正则表达式,可以为用户输入的任何单词动态创建。在上面的例子中,这个词是“on”。
正则表达式需要一个带有任意数量空格的单词([\ s] *),后跟搜索词(没有 - \ w跟在它之后,例如:on-time,on-wards不应该是有效的结果为了使这个复杂化,可以在这个例子后面加一个 - ,$,<或>符号,所以on,on或on都是有效的,这就是为什么在我的常规搜索词后面有一个负向前瞻表达如下。
有一个复杂的原因,但它是不相关的问题。最后一部分应该是句子的其余部分。在这个例子中,“和可用的解决方案之后。”
所以,
P1 = “\ n” 个
P2 = “开”
P3 = “和可用溶液后”
我现在有以下正则表达式。
test = new RegExp('([\\s]*)(on(?!\\-\\w))([$\\-><]*?\\s(?=[.]*))',"gi")
此正则表达式的第一部分([\\s]*)(on(?!\\-\\w))[$\\-><]*?
按预期工作。最后一部分没有。
在最后一部分,我试图做的是强制正则表达式引擎匹配其他字符前匹配空白。如果它不能匹配一个空格,那么正则表达式应该结束。然而,当我运行这个正则表达式,我得到下面的结果
str1 = "\nOn ly available after solution."
test.exec(STR1)
[ “\ n开”, “\ n”, “开” ]
因此,在我看来,最后积极的展望未能奏效。感谢您的任何建议,如果有人需要澄清,请告诉我。
编辑:
这样看来,我的正则表达式不匹配,因为我不知道下面的警告:
您可以使用先行内的任何正则表达式。 (请注意,这不适用于lookbehead,我将在下面解释它的原因。)任何有效的正则表达式都可以在lookahead中使用。如果它包含捕获括号,则反向引用将被保存。请注意,前视本身不会创建反向引用。所以它不包括在编号反向引用中。如果你想在反向引用中存储正则表达式的匹配,你必须在预见范围内的正则表达式周围捕获括号,如下所示:(?=(regex))。另一种方式将不起作用,因为在反向引用被保存时,lookahead已经放弃了正则表达式匹配。
你想知道如何做到这一点,或者你想知道如何使用正则表达式做呢?正则表达式不是*所有事情的答案,而且你以不同的方式做这件事情会更好。上帝帮助那些试图阅读你的代码的人。 – riwalk
如果还有其他方法可以做到这一点,我很想知道! – user210099