Javascript 正则表达式替换函数未按预期方式更新DOM

Javascript 正则表达式替换函数未按预期方式更新DOM,javascript,html,regex,Javascript,Html,Regex,我正在尝试使用正则表达式和javascript更新我的html。我可以捕获我想要的组,但是dom上的任何内容都不会改变我期望的方式 我想发现所有提到澳元的货币,我有一个正则表达式可以捕捉到这一点。然后我需要更改它的显示方式 我使用了.replace函数,但是它似乎没有改变任何东西。它似乎只在console.log中更改它 10AUD 帮助我们所有人 <p> 20THB</p> <p> There is 100USD, here</p> &l

我正在尝试使用正则表达式和javascript更新我的html。我可以捕获我想要的组,但是dom上的任何内容都不会改变我期望的方式

我想发现所有提到澳元的货币,我有一个正则表达式可以捕捉到这一点。然后我需要更改它的显示方式

我使用了.replace函数,但是它似乎没有改变任何东西。它似乎只在console.log中更改它

10AUD

帮助我们所有人

<p> 20THB</p>

<p> There is 100USD, here</p>

<p>More random sentances that should not be evalued even with 500 numbers in it</p>

<p>Here I can write a bunch like I had 300THB in my pocket and a spare 50AUD note aswell</p> 
20THB

这里有100美元

更多的随机语句,即使其中包含500个数字也不应求值

在这里,我可以像口袋里有300泰铢和一张50澳元的备用纸币一样写一堆东西

这里是js部分

regAUD = RegExp(/([0-9]+(AUD))/gi);

function checker() {
    str = document.getElementsByTagName('p');
    //str = str.innerText;
    for (i = 0; i < str.length; i++) {
       str[i].id = String(i+"para");
        console.log(str[i].innerText);
        inner = str[i].innerText;
        //Now make an if statement to if we go further
        //res = isCurrency(inner); //This passes correctly
        res = 1;
        if(res === 1){
            if(regAUD.test(inner)){
                inner = inner.replace(regAUD, '<b>$1</b>');
                console.log(inner);
                console.log("Done?");
            }
        }
    }
}
regAUD=RegExp(/([0-9]+(AUD))/gi);
函数检查器(){
str=document.getElementsByTagName('p');
//str=str.innerText;
对于(i=0;i

我假设我使用的函数不正确。它确实会显示在控制台中,但不会显示在预期的元素中。它没有改变任何东西,即我希望它目前能使10AUD和500AUD加粗,但它不能做到这一点。是否有更好的方法在DOM中实现此更改,或者我是否错误地使用了此函数?

在替换DOM中的regxmatch后,必须将段落innerHTML属性设置为replace

regAUD = RegExp(/([0-9]+(AUD))/gi);

function checker() {
    str = document.getElementsByTagName('p');
    //str = str.innerText;
    for (i = 0; i < str.length; i++) {
       str[i].id = String(i+"para");
        console.log(str[i].innerText);
        inner = str[i].innerText;
        //Now make an if statement to if we go further
        //res = isCurrency(inner); //This passes correctly
        res = 1;
        if(res === 1){
            if(regAUD.test(inner)){
                inner = inner.replace(regAUD, '<b>$1</b>');
                str[i].innerHTML= inner;
                console.log(inner);
                console.log("Done?");
            }
        }
    }
}
regAUD=RegExp(/([0-9]+(AUD))/gi);
函数检查器(){
str=document.getElementsByTagName('p');
//str=str.innerText;
对于(i=0;i
您忘记将新的HTML字符串影响到相关元素自己的HTML

此外,您还可以使用更短的函数

这里有一个参数有两个:

  • 选择器
    在所需元素上执行高亮显示
  • 货币
    突出显示所需货币
//突出显示“AUD”提到winthin所有元素。
highlightCurrencyFromElement('p','aud');
函数highlightCurrencyFromElement(选择器、货币){
常量元素=document.querySelectorAll(选择器),
pattern=newregexp(`(\\d+\\s*${currency})`,'gi');
for(设i=0;i

五,

21澳元

50澳元

50欧元

87美元

20澳元(跨度内,因此无突出显示)
变量
inner
是元素
innerText
的副本。为了更新DOM,您必须显式地更改
innerHTML
(因为这是您想要替换它的内容)。此外,您的所有变量都应该用
let
var
声明。哦,您也不需要显式的
RegExp
构造函数;只有
/…/
正则表达式文字。如果更新了
内部文本
,则
将按字面形式呈现,而不是解释为HTML标记。请尝试使用内部HTML代替内部文本。那是个打字错误。很抱歉给您带来不便,感谢您再次强调。