1

我有正则表达式:

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*)*$/;
4

1 回答 1

4

当然,只需使用 source 属性将表达式作为字符串获取,进行替换,然后使用新表达式创建一个新的 RegExp 对象:

var reValid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[^,'\s\\]*(?:\s+[^,'\s\\]+)*)\s*)*$/;
reValid = RegExp(reValid.source.replace(/'/g, '`'));
于 2012-04-22T07:02:51.613 回答