【发布时间】:2019-12-04 04:30:54
【问题描述】:
我已经在 Google Sheets multiple search and replace from a list 类似问题。
我正在使用脚本
function preg_quote( str ) {
// http://kevin.vanzonneveld.net
// + original by: booeyOH
// + improved by: Ates Goral (http://magnetiq.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// * example 1: preg_quote("$40");
// * returns 1: '\$40'
// * example 2: preg_quote("*RRRING* Hello?");
// * returns 2: '\*RRRING\* Hello\?'
// * example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
// * returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:'
return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}
function ARRAYREPLACE(input,fromList,toList,caseSensitive){
/* default behavior it is not case sensitive */
if( caseSensitive == undefined ){
caseSensitive = false;
}
/* if the from list it is not a list, become a list */
if( typeof fromList != "object" ) {
fromList = [ fromList ];
}
/* if the to list it is not a list, become a list */
if( typeof toList != "object" ) {
toList = [ toList ];
}
/* force the input be a string */
var result = input.toString();
/* iterates using the max size */
var bigger = Math.max( fromList.length, toList.length) ;
/* defines the words separators */
var arrWordSeparator = [ ".", ",", ";", " " ];
/* interate into the lists */
for(var i = 0; i < bigger; i++ ) {
/* get the word that should be replaced */
var fromValue = fromList[ ( i % ( fromList.length ) ) ]
/* get the new word that should replace */
var toValue = toList[ ( i % ( toList.length ) ) ]
/* do not replace undefined */
if ( fromValue == undefined ) {
continue;
}
if ( toValue == undefined ) {
toValue = "";
}
/* apply case sensitive rule */
var caseRule = "g";
if( !caseSensitive ) {
/* make the regex case insensitive */
caseRule = "gi";
}
/* for each end word char, make the replacement and update the result */
for ( var j = 0; j < arrWordSeparator.length; j++ ) {
/* from value being the first word of the string */
result = result.replace( new RegExp( "^(" + preg_quote( fromValue + arrWordSeparator[ j ] ) + ")" , caseRule ), toValue + arrWordSeparator[ j ] );
/* from value being the last word of the string */
result = result.replace( new RegExp( "(" + preg_quote( arrWordSeparator[ j ] + fromValue ) + ")$" , caseRule ), arrWordSeparator[ j ] + toValue );
/* from value in the middle of the string between two word separators */
for ( var k = 0; k < arrWordSeparator.length; k++ ) {
result = result.replace(
new RegExp(
"(" + preg_quote( arrWordSeparator[ j ] + fromValue + arrWordSeparator[ k ] ) + ")" ,
caseRule
),
/* need to keep the same word separators */
arrWordSeparator[ j ] + toValue + arrWordSeparator[ k ]
);
}
}
/* from value it is the only thing in the string */
result = result.replace( new RegExp( "^(" + preg_quote( fromValue ) + ")$" , caseRule ), toValue );
}
/* return the new result */
return result;
}
一个示例输入是;
"
详情
- 挂脖款式
- 无袖
- 可拆卸 腰系带
- 聚拢分层裙板
- 隐形 后拉链
- 后颈开口,按钮关闭
- 无衬里
尺码
- 模特身高 170 厘米,穿 8 码
- 平底裤 测量:
- 尺寸 8 长度 - 139cm,腰围 - 33cm, 胸围 - 43cm
- 尺码 10 身长 - 141cm,腰围 - 35cm,胸围 - 45cm
- 尺码12 身长 - 143cm 腰围 - 37cm 胸围 - 47cm
- 尺码14 身长-145cm 腰围-38cm 胸围-48cm
- 模特数据:胸围 - 76cm,腰围 - 57cm,臀围 - 91cm
服装护理
"
- 材料 - 人造丝
- 冷手分开洗
替换列表位于; https://docs.google.com/spreadsheets/d/1MxaZ1Jki1fnVw6jfFllur2BpPN6-6b6fAmLSKQniG-8/edit#gid=0
但是我的结果只显示了一些字符串的转换。下面是输出;
"
详情
- 挂脖款式
- 无袖
- 可拆卸 腰系带
- 聚拢分层裙板
- 隐形 后拉链
- 后颈开口,按钮关闭
- 无衬里
尺码
- 模特身高 5 英尺 6 英寸,穿 8 码
- 平底裤 测量:
- 尺寸 8 长度 - 54.5"",腰围 - 13"", 胸围 - 43 厘米
- 尺寸 10 长度 - 55.5"",腰围 - 14"",胸围 - 45cm
- 尺码 12 身长 - 56.5"",腰围 - 14.5"",胸围 - 47cm
- 尺码 14 身长 - 57"",腰围 - 15"",胸围 - 48cm
- 模特数据:胸围 - 30 英寸,腰围 - 22.5 英寸,臀围 - 91 厘米
服装护理
"
- 材料-人造丝
- 单独冷手洗
每行尺寸的第三个实例被忽略,尺寸完全被忽略。谁能告诉我脚本是否仅限于一定数量的替换,或者我应该进行任何更改以替换大小?提前致谢。
【问题讨论】:
标签: regex string google-apps-script google-sheets replace