所以我有以下代码:
cabc
var input = document.querySelector("input");
var h1 = document.querySelector("h1");
input.addEventListener("input", function(e){
h1.innerText = input.value.replace(/[a]/gi, 'e').replace(/[e]/gi, 'i').replace(/[i]/gi, 'o').replace(/[o]/gi, 'u').replace(/[u]/gi, 'y')
});
如您所见,如果我按“ a”,它将用“ e”替换“ a”。但是,这就像一个多米诺骨牌效应:它现在检测到“ e”,并将其替换为“ i”,依此类推,直到达到“ y”。我该如何预防?
注意::我不太擅长正则表达式,所以请尝试解释一下。
答案 0 :(得分:2)
如果交换 entity_id | owner_id | title | entity_type | property_value
----------------------------------------------------------------
4 | 5 | title 1 | type_1 | 0
5 | 5 | title 2 | type_2 | 1
6 | 5 | title 3 | type_3 | 1
链,它将起作用,而是以SELECT
sought.*,
entity_properties.property_value
FROM
entity AS sought
INNER JOIN
entity AS entity_type
JOIN
entity_properties AS properties
ON
properties.entity_id = entity_type.entity_id
WHERE
sought.owner_id = 5 AND sought.entity_type IN(
'type_1',
'type_2',
'type_3')
AND properties.property_key = 'is_cool'
开头并以replace()
结束
堆栈片段
.replace(/[u]/gi, 'y')
.replace(/[a]/gi, 'e')
答案 1 :(得分:2)
而不是使用无尽的
.replace()
链,
q
ueregExp /(a|e|i|o|u)/
.replace()
一次来娱乐和获利
var input = document.querySelector("input");
var h1 = document.querySelector("h1");
var lib = {
'a':'e',
'e':'i',
'i':'o',
'o':'u',
'u':'y',
};
input.addEventListener("input", function(e){
var q = new RegExp("("+ Object.keys(lib).join('|') +")", "ig");
h1.textContent = this.value.trim().replace(q, $1 => lib[$1]);
});
<input type="text">
<h1></h1>
工作方式:
String.prototype.replace()
method提供了一个回调函数,您可以在其中的参数中为正则表达式匹配 ()
←匹配组提供别名。我们只对第一个也是唯一的一组($1
)感兴趣。
在回调内部,我们用替换lib
rary中的字符替换匹配的字符出现。
为使其更易于理解,这是扩展版本:
//...
input.addEventListener("input", function(e){
var characterKeys = Object.keys(lib).join('|'); // "a|e|i|o|u"
var matchGroup = "("+ characterKeys +")"; // "(a|e|i|o|u)"
var reg = new RegExp(matchGroup , "ig");
// meaning: Match any of the characters present in the group
// (the | is the options delimiter).
// Finally:
var inputVal = this.value.trim();
var replacedText = inputVal.replace( reg , function(match1) {
return lib[ match1 ];
});
h1.textContent = replacedText;
});
return lib[ match1 ]
的作用很简单:
如果在对字符串进行正则表达式解析时遇到"e"
字符,return
是库替换,在这种情况下lib[ "e" ] === "i"
因此在该位置插入了字符"i"
回调点。
另外,请了解Object/keys
答案 2 :(得分:1)
您需要撤消替换顺序。
既然结束了(y不会被替换),则可以先用y替换u,用u替换o,以此类推。