How to replace certain symbols from the whole text except quoted text with REGEX
我有一个这样的变量
"lorem ipsum dolor sit amet;consetetur sadipscing eliter;sed diam nonumy eirmod tempor"invidunt;ut labure"et dolore magna aliquyam erat/sed diam voluptua."
我要做的是替换数组中的所有符号:
1 | var symbolsToreplace = [';', '/', '.'] |
逗号。另外,我想做的是不要替换引号内的任何内容,因此所有符号保持不变。以下是用于检测引号的regex:
1 | var detectQuotes = /"([^"]*)"/g; |
号
目前,我已经完成了任务的一部分(这里我将数组中的所有符号替换为','):
1 2 3 4 5 | symbolsToreplace.map(function (s) { if(text.indexOf(s) !== -1 ) { text.replace(s, ','); } }) |
如何应用regex
您可以用双引号拆分文本,然后仅对奇数片段应用替换,然后连接结果:
1 2 3 4 5 6 7 8 9 10 11 12 | var text ="Lorem ipsum dolor sit amet; consetetur sadipscing elitr; sed diam nonumy eirmod tempor "invidunt; ut labore" et dolore magna aliquyam erat/ sed diam voluptua."; var delimiters = ';./', template = new RegExp('[' + delimiters + ']','g') var replaced = text .split('"') .reduce(function(previous, current, index) { current = (index % 2 === 0) ? current.replace(template, ',') : current; return previous + '"' + current; }, ''); console.log(replaced); |
您可以将
1 2 3 4 5 6 | var s = 'Lorem ipsum dolor sit amet; consetetur sadipscing elitr; sed diam nonumy eirmod tempor"invidunt; ut labore" et dolore magna aliquyam erat/ sed diam voluptua.'; console.log( s.replace(/"([^"]+)"|[;.\/]/g, function($0,$1) { return $1 ? $0 : ',';}) // ES6: //s.replace(/"([^"]+)"|[;.\/]/g, ($0,$1) => $1 ? $0 : ',') ); |
号
细节
"([^"]+)" —与" 匹配,然后将除" 以外的任何一个或多个字符捕获到组1中,然后与" 匹配。| —或[;.\/] -a; 、. 或/ 字符function($0,$1) { return $1 ? $0 : ',';} —将整个匹配分配给$0 ,将捕获的子字符串分配给$1 。如果$1 不为空,则更换为全匹配,否则更换为, 。