将字符串添加到不区分大小写的 RegExp 中替换的事物开始

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

本文关键字:RegExp 替换 开始 大小写 添加 字符串 不区      更新时间:2023-09-26

很抱歉这个问题表述得不好,我希望我的文本和代码能更好地理解我想要完成的任务。

我正在为Android应用程序编写一些java脚本。我的网络视图的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' 
*/

这是我的代码(对不起,它都在一个字符串中,必须用于网络视图)。

                    "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[i])。知道我将如何做到这一点吗?我可以以某种方式使用 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);

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