2012-04-22 77 views
1

我的正则表达式:运行正则表达式的正则表达式替换在Javascript

var reValid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*)*$/; 

这验证一个CSV文件,但我希望能够与任何分隔符修改分隔符(')。

是否有可能运行一个正则表达式的正则表达式替换?

示例 - 使用反引号(')作为分隔符:

var reValid = /^\s*(?:`[^`\\]*(?:\\[\S\s][^`\\]*)*`|[^,`\s\\]*(?:\s+[^,`\s\\]+)*)\s*(?:,\s*(?:`[^`\\]*(?:\\[\S\s][^`\\]*)*`|[^,`\s\\]*(?:\s+[^,`\s\\]+)*)\s*)*$/; 
+0

这是可能的,但可能会导致意外的行为......建立使用定界符RegExp对象变量的正则表达式。这可确保只有需要的分隔符受影响的位置。 – sg3s 2012-04-22 07:13:26

+0

@ sg3s这就是我所做的,和它的工作... – 2012-04-22 07:55:39

回答

4

当然,只是使用源属性获取表达式作为一个字符串,做你的更换,然后创建一个新的RegExp与新的表达式对象:

var reValid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*)*$/; 
reValid = RegExp(reValid.source.replace(/'/g, '`')); 
+0

一个问题,如果原来的正则表达式有修饰语/ [正则表达式]/G,你需要重新添加。它不适用于我发布的示例。 – 2012-04-22 07:47:45