【发布时间】:2011-09-26 22:44:17
【问题描述】:
我正在尝试编写一个正则表达式来将以下字符串解析为三个不同的部分。这是针对我正在编写的突出显示引擎:
"\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”、“开”]
所以在我看来,最后的积极展望是行不通的。感谢您的任何建议,如果有人需要澄清,请告诉我。
编辑:
看来我的正则表达式不匹配,因为我没有意识到以下警告:
您可以在前瞻中使用任何正则表达式。 (请注意,lookbehind 不是这种情况。我将在下面解释原因。)任何有效的正则表达式都可以在lookahead 中使用。如果它包含捕获括号,则将保存反向引用。请注意,前瞻本身不会创建反向引用。因此,它不包括在对反向引用进行编号的计数中。如果要将正则表达式的匹配存储在反向引用中,则必须在前瞻内的正则表达式周围放置捕获括号,如下所示:(?=(regex))。反之亦然,因为在保存反向引用时,前瞻已经丢弃了正则表达式匹配。
【问题讨论】:
-
你想知道怎么做,还是想知道用正则表达式怎么做?正则表达式 NOT 是所有事情的答案,你最好换一种方式来做这件事。上帝帮助那些试图阅读您的代码的人。
-
如果有其他方法,我很想知道!
标签: javascript regex