2011-09-26 68 views
2

我试图编写一个正则表达式来将以下字符串解析为三个不同的部分。这是我正在写的一个高亮引擎: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已经放弃了正则表达式匹配。

+1

你想知道如何做到这一点,或者你想知道如何使用正则表达式做呢?正则表达式不是*所有事情的答案,而且你以不同的方式做这件事情会更好。上帝帮助那些试图阅读你的代码的人。 – riwalk

+0

如果还有其他方法可以做到这一点,我很想知道! – user210099

回答

1
  1. 在字符类[.]的点是指一个点文字。如果您想匹配任何角色,请将其更改为.
  2. 向前看(?=.*)将永远匹配并且完全没有意义。如果您只想捕获该部分字符串,请将其更改为(.*)
0

我认为这个问题是你的积极向前看on(?!\-\w)试图匹配后面没有-然后\w任何on。我想你想要什么,而不是为on(?!\-|\w),它匹配on后面没有通过- OR \w