对于语法修正程序,我不得不使用28个不同的RegExp
。
所以我做了一个简单的for
函数来一起处理所有修正。
var z = $(textarea).val();
for (const q of r){
z = z.replace(q.x, q.y);
}
$(textarea).val(z)
但是在这些RegExp中,我有2个冗余模式,我想用作变量。
非工作示例:
const d = new RegExp(/([^ ]+)/),
s = new RegExp(/[·\-\.•]/),
$e = d.source,
$t = s.source,
r = [
{"x":/($e)ain$tine/gi, "y":'$1ain $1ine'},
{"x":/($e)oux$tsse/gi, "y":'$1oux $1sse'},
{"x":/($e)gnon$tagne/gi, "y":'$1gnon $1gne'},
]
我该如何正确地做到这一点?
我找到了一些解决方案,但更适合一个RegExp
需求。
Thx:)
答案 0 :(得分:1)
更多与javascript字符串插值有关。它只会出现在模板字符串中,即用反引号括起来的字符串。
然后,您可以将非工作样本转换为:
const d = '[^ ]+', // No need to include parens twice, skipped here cause imho looks more clear to include it where it is used (below in array definition aside replacement pattern then)
s = '[-·.•]', // Note here, reordering for '-', and skipping unneaded '\' before '.' in character class
r = [
{"x":new RegExp(`(${d})ain${s}ine`,'gi'), "y":'$1ain $1ine'},
{"x":new RegExp(`(${d})oux${s}sse`,'gi'), "y":'$1oux $1sse'},
{"x":new RegExp(`(${d})gnon${s}agne`,'gi'), "y":'$1gnon $1gne'},
]
进一步说,我认为我们可以使用以下内容进一步概括:
function g(male, female) {
return new RegExp(`([^ ]+)(${male})[-·.•](${female})`, 'gi');
}
const r = [
g('ain', 'ine'),
g('oux', 'ouse'),
g('gnon', 'gne')
]
$("button").on("click",function(){
var z = $('#zone').val();
for (const q of r){
z = z.replace(q, '$1$2 $1$3')
}
$('#zone').val(z)
});
$1$2 $1$3
,即{root}{male marker} {root}{female marker}
。