在不区分大小写的 RegExp 中向开始替换的事物添加一个字符串。

Add a string to the thing begin replaced in a case insensitive RegExp.

很抱歉提出了错误的问题,我希望我的文字和代码能让它更好地理解我想要完成的事情。

我正在为 Android 应用编写一些 java 脚本。我的 webview 的 JavaScript RegExp 有一些问题。有人可以帮我吗?

我想做的事情的基本伪代码。

/*
* Replace all instances of a letter (case insensitive) with itself + add some string. 
* Example, search for all 'a' (case insensitive) and replace it with 'a 
* someString' if it was lowercase. If it was a capital than replace it with 'A someString' 
*/

这是我的代码(抱歉,它全部在一个字符串中,必须用于 webview)。

                    "var alpha = 'abcdefghijklmnopqrstuvwxyz'.split('');" +

                    "for (i = 0; i < 5; i++) " +
                    "{if(window.HtmlViewer.isActive(i))" +
                    "{var re = new RegExp( \"(\" + alpha[i] + \"(?![^<>]*>))\", 'gi' );" +
                    "document.body.innerHTML = document.body.innerHTML.replace(re, " +
                    "'<font  color=\"'+colorsArray[i]+'\">'+alpha[i]+'</font>');}" +
                    "else{break;}" +
                    "};" + 

在第一个循环中,它将所有 'a' 和 'A' 替换为 'a' 并为其赋予颜色。我想要的是让它只用 'a' 替换 'a' 和只用 'A' 替换 'A',即唯一改变的是颜色 "font color="'+colorsArray [一世])。知道我将如何做到这一点吗?我可以以某种方式使用 var re 来获取它是大写还是小写,而不是做类似的事情:

"'<font  color=\"'+colorsArray[i]+'\">'+re.getString()+'</font>');}" +

我现在的解决方案是制作两个 for 循环并删除 'i'(不区分大小写)修饰符。在第一个循环中我处理小写字母,在第二个循环中我处理大写字母。但这似乎是双重工作,因为 'a' 和 'A' 的颜色相同。一定有比这更好的方法吗?

首先,您不必使用循环来匹配每个字母,您可以使用带有 'i' 标志的正则表达式模式 [a-z] 来代替 "alpha[i]"。我在这里设置了一个适用于您的案例的示例: http://jsfiddle.net/yy6we65a/3/

var re = /([a-z](?![^<>]*>))/gi;
var colors = ["red","blue","green","yellow","orange"];
var i =0;
function encapsulate(src){
    var ret = '<font color="'+colors[i]+'">'+src+'</font>';    
    i++;
    if( i == 5) i = 0;
    return ret;
}

var orig = document.getElementById("container").innerHTML;
var target = document.getElementById("target");
target.innerHTML = orig.replace(re,encapsulate);

我没有你的颜色阵列,所以我用了我自己的一个,当然你也可以用你的。代码中有注释来解释每个部分。