4

我在一个函数中有一组对我来说效果很好的正则表达式,但我遇到了一种新模式,它们失败了。当字符串中没有更多字符时,此函数将失败。例如,我的函数匹配并替换以下文本:“ 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(?='')

两者都失败了。我错过了一个基本的知识花絮。我相信我需要知道怎么说,“当行中没有其他字符时,向前看并匹配”

4

3 回答 3

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"]
于 2011-05-17T17:10:18.127 回答
1

'No other characters in the line' 等同于 'at the end' 所以只需使用$元字符

于 2011-05-17T17:08:17.490 回答
0

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

\d+  - one or more digits
\s*  - any number of spaces
m    - a literal 'm'
\b   - a word boundry
于 2011-05-17T17:11:08.720 回答