我想要一个匹配" capitalizedExactlyThisWay"的所有实例的正则表达式没有大写的确切地说这个。
我创建了一个函数,用于查找所有不区分大小写的匹配项的索引,然后将值推回like this (JSBIN)
但我宁愿只说text.replace(regexp,"<highlight>$1</highlight>");
答案 0 :(得分:3)
replace
也有回调函数。
s = s.replace(reg1, function(m){
if(m===word) return m;
return '<highlight>'+m+'</highlight>';
});
答案 1 :(得分:0)
如果你能以某种方式使用JavaScript来处理部分不区分大小写的匹配,即(?i)
,则可以使用以下表达式:
capitalized(?!ExactlyThisWay)(?i)exactlythisway
如果没有,你可能会遇到这样的事情:
capitalized(?!ExactlyThisWay)[a-zA-Z]+
缺点是它还会匹配其他变体,例如capitalizedfoobar
等。
答案 2 :(得分:0)
您可以尝试使用此正则表达式匹配所有不区分大小写的exactlythisway
字符串,但不匹配ExactlyThisWay
,
\bcapitalized(?!ExactlyThisWay)(?:[Ee][Xx][Aa][Cc][Tt][Ll][Yy][Tt][Hh][Ii][Ss][Ww][Aa][Yy])\b
答案 3 :(得分:0)
不幸的是,JavaScript正则表达式不支持仅使表达式的一部分不区分大小写。
你可以写一个小帮手函数来做脏事:
function capitalizationSensitiveRegex(word) {
var chars = word.split(""), i;
for (i = 0; i < chars.length; i++) {
chars[i] = "[" + chars[i].toLowerCase() + chars[i].toUpperCase() + "]";
}
return new RegExp("(?=\\b" + chars.join("") + "\\b)(?!" + word + ").{" + word.length + "}", "g");
}
结果:
capitalizationSensitiveRegex("capitalizedExactlyThisWay");
=> /(?=\b[cC][aA][pP][iI][tT][aA][lL][iI][zZ][eE][dD][eE][xX][aA][cC][tT][lL][yY][tT][hH][iI][sS][wW][aA][yY]\b)(?!capitalizedExactlyThisWay).{25}/g
请注意,由于\b
在JavaScript中的工作方式有限,因此我们假设使用ASCII字母。它还假设您没有在word
中使用任何正则表达式元字符(括号,反斜杠,括号,星号,点等)。为了使上述稳定,需要对正则表达式引用每个char
的额外步骤。
答案 4 :(得分:0)
您可以将match
和map
方法与回调一起使用:
tok=[], input.match(/\bcapitalizedexactlythisway\b/ig).map( function (m) {
if (m!="capitalizedExactlyThisWay") tok.push(m); });
console.log( tok );
["capitalizedEXACTLYTHISWAY", "capitalizedexactlYthisWay", "capitalizedexactlythisway"]