Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript str.replace为字符串前面的单词添加颜色_Javascript_Regex - Fatal编程技术网

javascript str.replace为字符串前面的单词添加颜色

javascript str.replace为字符串前面的单词添加颜色,javascript,regex,Javascript,Regex,在csv.file中,列“col2”行包含字符串: "unserer {m}, unsere {p} and {f}, unseres {n}" 它是动态附加的 d3.select("#element").html(d.col2) 根据{m | f | n}的内容,我想更改文本的背景色 我正在用这样的正则表达式进行查找: /.*(\w+)\s\{f\}.*/ 我要将\w+替换为的位置 '<span style=background-color:red|yellow|green;&g

在csv.file中,列“col2”行包含字符串:

"unserer {m}, unsere {p} and {f}, unseres {n}"
它是动态附加的

d3.select("#element").html(d.col2)
根据{m | f | n}的内容,我想更改文本的背景色

我正在用这样的正则表达式进行查找:

/.*(\w+)\s\{f\}.*/ 
我要将\w+替换为的位置

'<span style=background-color:red|yellow|green;>$1</span>
”$1
我需要这三个用例{m},{f},{n},每个用例都应该有自己的文本颜色。所以

 d3.select("#sentence").html(d.col2).html(function(d) {
   if ( this.match("{m}"){ 
        this.replace(/.*(\w+)\s\{m\}/gi, "<span  style=color:red;>" + $1"</span>");
 } if ( this.match("{f}") {
       this.replace(/.*(\w+)\s\{f\}/gi, "<span style=color:yellow;>" + $1"</span>");
 } else {
 this.replace(/.*(\w+)\s\{n\}/gi, "<span style=color:green;>" + $1"</span>");
 }
 };)
d3.select(“#句”).html(d.col2).html(函数(d){
如果(this.match(“{m}”){
替换(/.*(\w+)\s\{m\}/gi,“+$1”);
}if(this.match(“{f}”){
替换(/.*(\w+)\s\{f\}/gi,“+$1”);
}否则{
替换(/.*(\w+)\s\{n\}/gi,“+$1”);
}
};)
这段代码是我想做的伪代码;它不起作用,我不确定是否可以这样做。

您可以在中使用函数作为replacor,也可以在RegExp中使用函数

var str=“unserer{m},unsere{p}和{f},unsere{n}”;
变量d={
m:‘红色’,
f:‘黄色’,
n:‘绿色’
},
re=/(\w+(=\s+\{([^}]+)\})/g;
str=str.replace(
重新,
函数($0,$1,$2){
若有(d中为2美元)
返回“+$1+”;
返回$0;
}
);
//'不安全{m},不安全{p}和{f},不安全{n}'
您可以在中使用函数作为replacor,也可以在RegExp中使用函数

var str=“unserer{m},unsere{p}和{f},unsere{n}”;
变量d={
m:‘红色’,
f:‘黄色’,
n:‘绿色’
},
re=/(\w+(=\s+\{([^}]+)\})/g;
str=str.replace(
重新,
函数($0,$1,$2){
若有(d中为2美元)
返回“+$1+”;
返回$0;
}
);
//'不安全{m},不安全{p}和{f},不安全{n}'
您可以在中使用函数作为replacor,也可以在RegExp中使用函数

var str=“unserer{m},unsere{p}和{f},unsere{n}”;
变量d={
m:‘红色’,
f:‘黄色’,
n:‘绿色’
},
re=/(\w+(=\s+\{([^}]+)\})/g;
str=str.replace(
重新,
函数($0,$1,$2){
若有(d中为2美元)
返回“+$1+”;
返回$0;
}
);
//'不安全{m},不安全{p}和{f},不安全{n}'
您可以在中使用函数作为replacor,也可以在RegExp中使用函数

var str=“unserer{m},unsere{p}和{f},unsere{n}”;
变量d={
m:‘红色’,
f:‘黄色’,
n:‘绿色’
},
re=/(\w+(=\s+\{([^}]+)\})/g;
str=str.replace(
重新,
函数($0,$1,$2){
若有(d中为2美元)
返回“+$1+”;
返回$0;
}
);
//'不安全{m},不安全{p}和{f},不安全{n}'

无需向我解释德语-我是德国人

这是我的RegExp版本,它可能会更好地处理性别和复数:

var r=/(^|,)\s*(.*?)(?=\s+\{([fmn])\})/g;
s.replace(r,'$1<span class="$3">$2</span>');
当然,这些类需要在CSS中提供合适的颜色

更新

正如您所知,好的东西总是可以改进的,因此这里有一个版本不会给
{p}
标记(或任何以
'{
开头的标记)上色:

s.replace(/(^ |,)\s*([^{]+)(?=.*.\{([fmn])\})/g,'$1$2')
这会让你

'<span class="m">unserer </span>{m},<span class="f">unsere </span>{p} and {f},<span class="n">unser </span>{n}'
'unseer{m},unseer{p}和{f},unser{n}'

无需向我解释德语-我是德国人

这是我的RegExp版本,它可能会更好地处理性别和复数:

var r=/(^|,)\s*(.*?)(?=\s+\{([fmn])\})/g;
s.replace(r,'$1<span class="$3">$2</span>');
当然,这些类需要在CSS中提供合适的颜色

更新

正如您所知,好的东西总是可以改进的,因此这里有一个版本不会给
{p}
标记(或任何以
'{
开头的标记)上色:

s.replace(/(^ |,)\s*([^{]+)(?=.*.\{([fmn])\})/g,'$1$2')
这会让你

'<span class="m">unserer </span>{m},<span class="f">unsere </span>{p} and {f},<span class="n">unser </span>{n}'
'unseer{m},unseer{p}和{f},unser{n}'

无需向我解释德语-我是德国人

这是我的RegExp版本,它可能会更好地处理性别和复数:

var r=/(^|,)\s*(.*?)(?=\s+\{([fmn])\})/g;
s.replace(r,'$1<span class="$3">$2</span>');
当然,这些类需要在CSS中提供合适的颜色

更新

正如您所知,好的东西总是可以改进的,因此这里有一个版本不会给
{p}
标记(或任何以
'{
开头的标记)上色:

s.replace(/(^ |,)\s*([^{]+)(?=.*.\{([fmn])\})/g,'$1$2')
这会让你

'<span class="m">unserer </span>{m},<span class="f">unsere </span>{p} and {f},<span class="n">unser </span>{n}'
'unseer{m},unseer{p}和{f},unser{n}'

无需向我解释德语-我是德国人

这是我的RegExp版本,它可能会更好地处理性别和复数:

var r=/(^|,)\s*(.*?)(?=\s+\{([fmn])\})/g;
s.replace(r,'$1<span class="$3">$2</span>');
当然,这些类需要在CSS中提供合适的颜色

更新

正如您所知,好的东西总是可以改进的,因此这里有一个版本不会给
{p}
标记(或任何以
'{
开头的标记)上色:

s.replace(/(^ |,)\s*([^{]+)(?=.*.\{([fmn])\})/g,'$1$2')
这会让你

'<span class="m">unserer </span>{m},<span class="f">unsere </span>{p} and {f},<span class="n">unser </span>{n}'
'unseer{m},unseer{p}和{f},unser{n}'


你能告诉我们你的示例字符串的预期最终输出吗?你能创建一个你的代码的示例提琴或弹琴吗?我试图回答你的最后一个问题,但对你是如何进行数据绑定感到非常困惑..“unseer{m},unseer{f},unsere{n}”也是最终输出,但ist的“unseer”应为红色,“unseer”应为黄色,“unsere”应为绿色。@标记数据绑定正常。元素“#句”在单击时设置:单击=函数(d){d3.select(#句”).html(d.col2)};d.col2是csv数据集的一部分,该数据集包含col1、col2等列。该字符串首先出现在工具提示中:单击后会附加到“#句”中。这些是字典中的单词,应根据性别进行着色。问题在于替换或拆分并连接字符串。如果每个字符串只包含一个性别,这不会是一个问题。您可以向我们展示示例字符串的预期最终输出吗?可以吗