匹配单词不以某种方式大写

时间:2014-07-03 06:01:49

标签: javascript regex

我想要一个匹配" capitalizedExactlyThisWay"的所有实例的正则表达式没有大写的确切地说这个。

Here is what I'm trying to do

我创建了一个函数,用于查找所有不区分大小写的匹配项的索引,然后将值推回like this (JSBIN)

但我宁愿只说text.replace(regexp,"<highlight>$1</highlight>");

5 个答案:

答案 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等。

Demo

答案 2 :(得分:0)

您可以尝试使用此正则表达式匹配所有不区分大小写的exactlythisway字符串,但不匹配ExactlyThisWay

\bcapitalized(?!ExactlyThisWay)(?:[Ee][Xx][Aa][Cc][Tt][Ll][Yy][Tt][Hh][Ii][Ss][Ww][Aa][Yy])\b

Demo

答案 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)

您可以将matchmap方法与回调一起使用:

tok=[], input.match(/\bcapitalizedexactlythisway\b/ig).map( function (m) {
     if (m!="capitalizedExactlyThisWay") tok.push(m); });

console.log( tok );
["capitalizedEXACTLYTHISWAY", "capitalizedexactlYthisWay", "capitalizedexactlythisway"]