我有一个富文本框,用户可以在其中设计HTML页面,但我无法访问TextArea的keyup或keydown事件,因此无法在运行时更改用户输入的内容。最终我将获得一个包含各种HTML标签的富文本值,任何HTML标记都允许在该富文本值中。现在我想将用户输入的任何数字更改为单词,例如如果用户输入1,则希望将其替换为单词(one),对于2、3、4等同理,但同时我想保留在HTML标记中找到的数字,以便保留用户对所设计的富文本进行的样式设置。例如,如果我生成了以下HTML:
但是这段代码的结果是:
<h1>Title1: Hi iam first title</h1><h3>Title3 hi iam third title</h3>
<div style='width:23px'>iam a div with 23 pixels width</div>
这只是一个例子,但用户可以构建任何HTML设计、样式和标签,因此输入可能会与此示例不同且更加复杂。 使用JavaScript,我想将其更改为:
<h1>Titleone: Hi iam first title</h1><h3>Titlethree hi iam third title</h3>\
<div style='width:23px'>iam a div with twothree pixels width</div>
var oldValue = '<h1>Title1: Hi iam first title</h1><h3>Title3 hi iam third title</h3>
<div style='width:23px'>iam a div with 23 pixels width</div>';
var newValue = oldValue.replace(/1|2|3/g, function convertNumbers(x) {
switch (x) {
case '1':
return 'one';
break;
case '2':
return 'two';
break;
case '3':
return 'three';
break;
}
});
但是这段代码的结果是:
<hone>Titleone: Hi iam first title</hone><hthree>Titlethree hi iam third title</hthree>
<div style='width:twothreepx'>iam a div with twothree pixels width</div>
我试图使用正则表达式来替换任何(>
)和(<
)之间的字符串,但不知道如何构造正则表达式,请帮忙。
现在我想指定一个模式,只替换HTML中的文本,并且不更改HTML标签的样式或属性中的数字,在我看来,可以通过使用正则表达式找到一个模式来获取左侧有“>”和右侧有“<”的文本来实现,例如:
<h1>Title1: Hi iam first title</h1>
如果我使用了之前字符串的模式,获取左侧有'>'且右侧有'<'的字符串,那么我只会得到'Title1: Hi iam first title',所以我需要替换在这个结果字符串中找到的数字才能得到想要的输出。
这种方式可行吗?还是我需要重新考虑使用正则表达式并找到另一种完成任务的方法?