Javascript lookahead正则表达式

时间:2011-09-26 22:44:17

标签: javascript regex

我正在尝试编写一个正则表达式来将以下字符串分解为三个不同的部分。这是我正在写的突出引擎:

“\ 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 On”,“\ n”,“On”]

所以在我看来,最后的积极向前看不起作用。感谢您的任何建议,如果有人需要澄清,请告诉我。

编辑:

看起来我的正则表达式不匹配,因为我没有意识到以下警告:

  

您可以在前瞻中使用任何正则表达式。 (请注意,这不是lookbehind的情况。我将在下面解释原因。)任何有效的正则表达式都可以在前瞻中使用。如果它包含捕获括号,则将保存反向引用。请注意,前瞻本身不会创建反向引用。因此,它不包括在编号反向引用的计数中。如果要将正则表达式的匹配存储在反向引用中,则必须在前瞻中将正则表达式中的捕获括号括起来,如下所示:(?=(regex))。反过来说不起作用,因为在要保存反向引用时,前瞻已经丢弃了正则表达式匹配。

2 个答案:

答案 0 :(得分:1)

  1. 字符类[.]中的点表示文字点。如果您希望匹配任何角色,请将其更改为.
  2. 前瞻(?=.*)总是匹配,完全没有意义。如果您只想捕获该部分字符串,请将其更改为(.*)

答案 1 :(得分:0)

我认为问题在于您的积极前瞻on(?!\-\w)正在尝试匹配on之后没有-的任何\w。我认为您想要的是on(?!\-|\w),其匹配on后面没有-\w