如何在正则表达式中使用前瞻以匹配无字符?

时间:2011-05-17 17:05:14

标签: javascript regex actionscript lookahead

我在函数中有一组正则表达式,对我来说效果很好,但是我遇到了一个失败的新模式。当字符串中没有其他字符时,此函数将失败。例如,我的函数匹配并替换以下文本: “1 m is equivalent to...”变为“1 meter is equivalent to...”但是,它失败了: “There are 100 cm in 1 m

我正在使用AS3,我认为它有一个几乎相当于JavaScript的正则表达式引擎。目前的模式是:

[0-9]+ m(?= )|[0-9]+m(?= )

我循环遍历模式列表和替换字符串,因此很容易将另一个模式添加到列表中。我试过了:

[0-9]+ m(?=)|[0-9]+m(?=)

[0-9]+ m(?='')|[0-9]+m(?='')

两者都失败了。我错过了一个基本的知识点。我相信我需要知道怎么说,“当行中没有其他角色时,前瞻和匹配”

3 个答案:

答案 0 :(得分:3)

您可以通过查找单词边界(\b)来简化表达式;像这样的东西:

var regex = /(\d+)\s*m\b/;
regex.exec('1 m is equivalent to...'); // => ["1 m", "1"]
regex.exec('There are 100 cm in 1 m'); // => ["1 m", "1"]

答案 1 :(得分:1)

'行中没有其他字符'等同于'在行尾',所以只需使用$元字符

答案 2 :(得分:0)

您正在寻找由序列\b表示的单词边界。您可以使用表达式/\d+\s*m\b/

\d+  - one or more digits
\s*  - any number of spaces
m    - a literal 'm'
\b   - a word boundry