2011-11-07 53 views
3

我在做什么错在这里?无效量词对正则表达式的JavaScript错误

我试图与使用javascript另一个数字的字符串替换数。我有一个很长的字符串,它有几个数字1。我需要在每种情况下用2替换数字1,除非1两边都有另一个数字。我做了一堆谷歌搜索如何使用正则表达式(我是完全新的正则表达式),我想出了这个。

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

基本上,我想正则表达式匹配(从而替换)在那里它被任何东西,除了另一个号码包围的号码1的每次出现。我不想比赛进行到包括周围的人物 - 数量只有1

我不断收到无效量词错误在我的萤火控制台。我究竟做错了什么?

回答

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 “与捕获组12替换”(这是它看起来像我的),而是“替换为捕获组1,接着是数字2。

+0

是结肠正确的操作为负回顾后?我正在阅读[链接] http://www.regular-expressions.info/lookaround.html关于如何做负面lookbehinds,他说使用lt字符。我用你说的冒号代替了它,我不再发生错误,但它不会返回任何匹配?我试着在最后一个斜杠后面加上g来匹配每一次出现,但它仍然不起作用。我在这里无能为力。 – codescribblr

+0

@Jonathan:不,JavaScript没有外观(只有前瞻性,正面和负面)。 '?:'只是表示一个非捕获块。 –

+0

很好的解释!非常感谢。以下是我根据你给我的结果得出的结论:'var i = 1; \t $( “#addshipmentobjecbutton”)点击(函数(){ \t \t如果(ⅰ<= 5){ \t \t \t变种old_object = $( '#shipmentobject')的HTML(); \t \t \t var new_object = old_object.replace(/(^ | \ D)\ d(?!\ d)/ g,“$”+ i + 2); \t \t \t $('#shipmentobjects')。append(“

”+ new_object +“
”); \t \t \t i ++; \t \t} \t});' – codescribblr

相关问题