用 JSX 元素替换字符串?
Replace string with JSX element?
我想像这样格式化日期时间:
yyyy-MM-dd hh:mm:ss
如果我return一个字符串是这样的:
2016-07-02 20:14:12
有些代码是这样的(所有代码都是here):
let token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])?|[LloSZWN]|'[^']*'|'[^']*'/g;
mask.replace(token, (match) => {
if (match in flags) {
return flags[match];
}
return match.slice(1, match.length - 1);
});
现在的问题是我希望数字被React.Component
包裹起来,比如:
<span>2016</span>-<span>07</span>-<span>02</span> <span>20</span>:<span>14</span>:<span>12</span>
我要指出的是,包裹元素并不总是span
,可能是我自己定义的组件,比如MyComponent
您可以尝试这样的操作:
注意:这是纯字符串计算。您可以检查 JSX 的逻辑和更新。
var str = "2016-07-02 20:14:12";
var result = str.split(" ").map(function(a){
var delimeter = a.match(/[^0-9]/)[0];
return a.split(delimeter).map(function(item){
return "<span>" + item + "<span>";
}).join(delimeter);
}).join(" ");
document.getElementById("result").innerText = result;
<span id="result"></span>
对于 JSX,我想你可以尝试这样的事情:
var str = "2016-07-02 20:14:12";
var result = str.split(" ").map(function(a){
var delimeter = a.match(/[^0-9]/)[0];
return a.split(delimeter).map(function(item){
return <span>{item}<span>;
}).join(delimeter);
}).join(" ");
经过一些研究,我发现现有的库不符合我的要求。所以,当然,我自己写了:
https://github.com/EfogDev/react-process-string
非常容易使用。您的案例示例:
let result = processString({
regex: /[0-9+]/gim,
fn: (key, match) => <span key={key}>{match[1]}</span>
})(mask);
我想像这样格式化日期时间:
yyyy-MM-dd hh:mm:ss
如果我return一个字符串是这样的:
2016-07-02 20:14:12
有些代码是这样的(所有代码都是here):
let token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])?|[LloSZWN]|'[^']*'|'[^']*'/g;
mask.replace(token, (match) => {
if (match in flags) {
return flags[match];
}
return match.slice(1, match.length - 1);
});
现在的问题是我希望数字被React.Component
包裹起来,比如:
<span>2016</span>-<span>07</span>-<span>02</span> <span>20</span>:<span>14</span>:<span>12</span>
我要指出的是,包裹元素并不总是span
,可能是我自己定义的组件,比如MyComponent
您可以尝试这样的操作:
注意:这是纯字符串计算。您可以检查 JSX 的逻辑和更新。
var str = "2016-07-02 20:14:12";
var result = str.split(" ").map(function(a){
var delimeter = a.match(/[^0-9]/)[0];
return a.split(delimeter).map(function(item){
return "<span>" + item + "<span>";
}).join(delimeter);
}).join(" ");
document.getElementById("result").innerText = result;
<span id="result"></span>
对于 JSX,我想你可以尝试这样的事情:
var str = "2016-07-02 20:14:12";
var result = str.split(" ").map(function(a){
var delimeter = a.match(/[^0-9]/)[0];
return a.split(delimeter).map(function(item){
return <span>{item}<span>;
}).join(delimeter);
}).join(" ");
经过一些研究,我发现现有的库不符合我的要求。所以,当然,我自己写了:
https://github.com/EfogDev/react-process-string
非常容易使用。您的案例示例:
let result = processString({
regex: /[0-9+]/gim,
fn: (key, match) => <span key={key}>{match[1]}</span>
})(mask);