英特尔Mac上的Javascript Regex.是模式和子模式替换bug
Javascript Regex on Intel Mac. Are patterns and subpattern replacement buggy?
我在带有OS X Lion的英特尔Mac上使用BBEdit。我想使用Javascript 将str="a,b,c,d,e,f,g,h,i.j"
转换为str=["a","b"]["c","d"]["e,"f"]["g","h"]
我试过这个代码:
var myArray = str.replace(/('w+),('w+)/g,"["$1","$2"]")
我也尝试过:
var re = new RegExp("('w+),('w+)", "g");
var myArray = str.replace(re,"["$1“,"$2“]" );
两者都可以使用BBEdit自己的搜索/替换工具,也可以使用几个在线regex测试人员,但我无法在脚本中使用它。
我已经玩了两天的代码了,似乎问题是解释
var myArray2 = str.replace(/',/g,''"']','['"')
适用于生产a"],["b"],["c"],["d"],["e"],["f"],["g"],["h"],["i"],["j
我尝试了[a-zA-Z]
而不是'w
,但这也不起作用。有人经历过类似的问题吗?有人能提出解决办法吗?
我想我理解您想要做的事情,并且解决方案不涉及正则表达式。我会先解释一下原因。听我说完。
您正试图使用.replace()
和正则表达式来解决问题,这意味着您正试图将字符串'str="a,b,c,d,e,f,g,h,i.j"'
转换为字符串'str=["a","b"]["c","d"]["e,"f"]["g","h"]'
。
这很容易,而且你几乎做到了:
var original = 'str="a,b,c,d,e,f,g,h,i.j"';
var result = original.replace(/('w+),('w+)/g, '["$1","$2"]');
// result === 'str="["a","b"],["c","d"],["e","f"],["g","h"],i.j"';
请注意替换字符串周围的引号不匹配。或者,您可以转义字符串中的引号;"['"$1'",'"$2'"]"
。
然而,我怀疑这是否是你想要做的。我认为,相反,你试图将字符串"a,b,c,d,e,f,g,h,i.j"
变成数组的数组,(在数组文字表示法中)将由:[["a","b"], ["c","d"], ["e,"f"], ["g","h"]]
声明。
这不是用一个正则表达式就能做到的。对于正则表达式,您只能replace()
表示匹配,test()
表示匹配,或返回match()
es。
试试这个(也可以在JSFiddle上):
var str = "a,b,c,d,e,f,g,h,i.j";
var parts = str.split(',');
var num_pairs = Math.floor(parts.length / 2);
var result = [];
for (var i=0; i < num_pairs; i+=1) {
result.push([parts[i*2], parts[(i*2)+1]]);
}
// result === [["a", "b"], ["c", "d"], ["e", "f"], ["g", "h"]]
由于零件数量不均匀(i.j
是第九个元素),您必须决定是否应该丢弃它(如本例所示)。否则,如果将Math.floor
更改为Math.round
,则最后一个数组将为["i.j", undefined]
。
顺便说一句:关于您的原始解决方案:
str.replace(/('w+),('w+)/g, "["$1","$2"]");
这不起作用的原因与'w
无关。只是因为它抛出了一个SyntaxError
。试试看你的JavaScript错误控制台。
这是因为你没有转义字符串中的-qoutes,但你也没有连接。也就是说,你本可以这样做:
str.replace(/('w+),('w+)/g, "["+$1+","+$2+"]");
注意连接,使用+
。现在它是一个有效的字符串,不会抛出SyntaxError
。但是,它将抛出一个TypeError
,因为变量$1
和$2
是undefined
。关键是把它变成一个完整的字符串:
str.replace(/('w+),('w+)/g, '["$1","$2"]');
// or
str.replace(/('w+),('w+)/g, "['"$1'",'"$2'"]");
replace()
函数将用匹配的值替换字符串中的$-部分。
- 正则表达式根据模式替换所有匹配项
- 将字符串中的正则表达式模式替换为依赖于匹配项的替换字符串
- JavaScript 将子字符串替换为重复次数的值
- 使用 Jquery 将子字符串替换为段落中的 html 元素,而不会弄乱出现的事件
- 根据Javascript中的模式替换单词
- 正则表达式查找模式,返回子模式
- 不包括子模式的正则表达式
- Meteor.js&Collection2:更新在子模式中插入新对象的方法
- JavaScript正则表达式跳过子模式
- 用Javascript模式替换提示
- 英特尔Mac上的Javascript Regex.是模式和子模式替换bug
- 正则表达式将最后一个括号中的子字符串替换为Javascript中三角括号和第一个右右括号之间的字符串
- IE7|8中使用特殊替换模式替换字符串的奇怪行为
- 在父猫模式的数组中删除子模式中的单个行
- 使用 JavaScript 替换和子字符串替换字符
- Emacs -用另一个字符串模式替换一些字符串模式
- 子模式的正则表达式
- 使用JavaScript将子域名替换为其他子域名
- 用重复的模式替换一行正则表达式
- 用子路由替换父视图