正则表达式上无效的量词javascript错误

时间:2011-11-07 17:37:47

标签: javascript regex

我在这里做错了什么?

我正在尝试使用javascript将字符串中的数字替换为另一个数字。我有一个很长的字符串,其中数字为1。我需要在每种情况下将数字1替换为2,除非1在另一侧有另一个数字。我做了一堆谷歌搜索如何使用正则表达式(我对正则表达式来说是全新的)并且我想出了这个。

string.replace(/(?<!\d)1(?!\d)/,2);

基本上,我希望正则表达式匹配(并因此替换)数字1的每次出现,除了另一个数字之外,它被包围。我不希望匹配包含周围的字符 - 只有数字1。

我在firebug控制台中不断收到无效的量词错误。我做错了什么?

1 个答案:

答案 0 :(得分:7)

这一点:(?<!\d)。没有(?<,只有(?:(?=(?!

JavaScript并不具有后瞻性,但我认为你可以在这种情况下解决它,如下所示:

str = str.replace(/(^|\D)1(?!\d)/g, "$12")

捕获紧接数字之前的字符,然后将其回送(替换字符串中的$1),然后回显新内容(2)。开头附近的^允许数字是字符串中的第一个字符。

Live example

打破它:

(^|\D)   Match either start-of-string, or a non-digit, and capture the result
1        Match the digit 1...
(?!\d)   ...but only if it isn't followed by a digit

在替换中,$12 &#34;替换为捕获组12&#34; (这对我来说是这样的),但&#34;替换为捕获组1,后跟数字2。&#34;