ç§ã¯æããã«æ©èœããŠããªããã®ã³ãŒããæã£ãŠããŸãïŒ
_.each(matches, (match) ->
string = string.replace(match, ->
<span className="match" key={i++}>{match}</span>
)
)
ããã¯ãæååããªããžã§ã¯ããšæ··åšããçµæã«ãªãããã§ãã æªãç§ã¯ç¥ã£ãŠããŸãã ããããã©ãããã°æååå ã«Reactã³ã³ããŒãã³ããè¿œå ã§ããŸããïŒ ç§ã欲ããã®ã¯ãreactã³ã³ããŒãã³ãã§æååã®äžéšã匷調衚瀺ããããšã§ãã ã¯ã©ãã¯ããã®ã¯é£ããã±ãŒã¹ã ãšæããŸãã
ãã®ãããªãã®ãæ©èœããã¯ãã§ãïŒ
const escapeRE = new RegExp(/([.*+?^=!:$(){}|[\]\/\\])/g)
const safeRE = (string) => {
return string.replace(escapeRE, "\\$1")
}
class Hightlight extends Component {
static propTypes = {
match : PropTypes.string,
string : PropTypes.string,
}
render() {
return (
<span
dangerouslySetInnerHTML={{
__html : string.replace(safeRE(this.props.match), "<strong className\"match\">$1</strong>")
}} />
)
}
}
ã¯ããç§ã¯dangerouslySetInnerHTML
ãæªçšããããšãèããŠããŸãããããã®èãã¯å¥œãã§ã¯ãããŸããã ãã®æ¹æ³ã¯ãæ£åœãªçç±ã§å±éºãšã©ãã«ä»ããããŠããŸãã
æååå ã®jsxã解æããããã«Reactã«æããæ¹æ³ã¯ãããŸãããïŒ Reactã«iEã解æããã
var example = "this one word <span className="match" key={i++}>hello</span> is highlighted"
ãããŠãããrenderã¡ãœããã§è¿ããŸããïŒ
@binarykitchen ReactèŠçŽ ãåçã«æ§ç¯ã§ããŸãããããããã§è¡ãå¿ èŠããããŸããæååã®çœ®æã ãã§ã¯ããããè¡ãããšã¯ã§ããŸããã
@syranideã¯ããç§ã¯ãã§ã«ãããç¥ã£ãŠããŸãã ç§ã®ãã€ã³ãã¯ãããã¯çŽ æŽãããJSX / Reactæ©èœã§ã¯ãªãããšããããšã§ãã æååã解æããå éšã®ã¿ã°ãåReactã³ã³ããŒãã³ãã«å€æããŸãã
split
é¢æ°ãæ£èŠè¡šçŸã§äœ¿çšããŠããã次ã®ããã«ãã£ããã£ãããããŒãã眮ãæããããšãã§ããŸãã
var parts = "I am a cow; cows say moo. MOOOOO.".split(/(\bmoo+\b)/gi);
for (var i = 1; i < parts.length; i += 2) {
parts[i] = <span className="match" key={i}>{parts[i]}</span>;
}
return <div>{parts}</div>;
äžæãªç¹ãããå Žåã¯ãç¥ãããã ããã
å®è¡æã®JSXã®è§£æã¯ãšã©ãŒãçºçãããããæéãããããã»ãã¥ãªãã£ã«åœ±é¿ãäžããå¯èœæ§ããããŸããæ¬è³ªçã«ãdangerlySetInnerHTMLãããå®å šã§ã¯ãããŸããã
掻åã±ãŒã¹ã§ã¯å°ãåé¡ã«ãªãå¯èœæ§ããããŸã
â mlb
12ã®ç«æ2015幎ãååŸ9æ37åã§ããã³ã»ã¢ã«ããŒã[email protected]ã¯æžããŸããïŒ
åå²é¢æ°ãæ£èŠè¡šçŸã§äœ¿çšããŠããã次ã®ããã«ãã£ããã£ãããããŒãã眮ãæããããšãã§ããŸãã
var Parts = "ç§ã¯çã§ããçã¯mooãšèšããŸããMOOOOOã"ãsplitïŒ/ïŒ\ bmoo + \ bïŒ/ giïŒ;
forïŒvar i = 1; i <parts.length; i + = 2ïŒ{
ããŒã[i] = ;}æ»ã{éšå};
äžæãªç¹ãããå Žåã¯ãç¥ãããã ãããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ããã°ã©ã ã§æååã®äžéšã匷調衚瀺ããããšãããšãã«ãããã®åé¡ãçºçããŸããïŒã€ãŸãã <span>
ã¿ã°ã«çœ®ãæããŸãïŒã äžèšã®@spicyjã®ãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠã¢ãžã¥ãŒã«ãäœæããããšã«ãªããŸããã èå³ã®ãã人ã®ããã«ïŒ iansinnott / react-string-replace
@iansinnottãããå
±æããŠãããŠããããšãã ç§ã¯å®å
šãªå¿
èŠãããããã ãå®çŸããããã䜿çšãå§ããString.prototype.replace
ïŒçœ®ãæããé¢æ°å
ã§æ£èŠè¡šçŸã®ããã®åå¥ã®ãããã³ã°ã°ã«ãŒããžã®ã¢ã¯ã»ã¹ãå¿
èŠãšããïŒAPIãã å€æŽã¯åçŽãªããã以äžã®ãã®ã«ãªãïŒãããŠAPIã®å€æŽãå¿
èŠã«ãªãïŒããšã«æ°ä»ããã®ã§ãæ°ãããªããžããªãäœæããŸããïŒ https ïŒ
react-string-replace
ãèŠä»¶ã«åããªãå ŽåïŒ
以äžã¯ãããã¹ãæååå
ã®ããŒã¯ãŒãã匷調衚瀺ããæ¹æ³ãšããŠæ©èœããŸããã
å±éºãªHTMLã®èšå®ïŒ
/**
* Find and highlight relevant keywords within a block of text
* <strong i="7">@param</strong> {string} label - The text to parse
* <strong i="8">@param</strong> {string} value - The search keyword to highlight
* <strong i="9">@return</strong> {object} A JSX object containing an array of alternating strings and JSX
*/
const formatLabel = (label, value) => {
if (!value) {
return label;
}
return (<span>
{ label.split(value)
.reduce((prev, current, i) => {
if (!i) {
return [current];
}
return prev.concat(<b key={value + current}>{ value }</b>, current);
}, [])
}
</span>);
};
formatLabel('Lorem ipsum dolor sit amet', 'dolor');
// <span>Lorem ipsum <b>dolor</b> sit amet</span>
è€æ°ã®å€ãã©ããã§ããããã«ãããã€ãã®ãã¿ãŒã³ã«äžèŽããèšåã®ããã«ãã®ãããªãã®ãå¿ èŠã§ããã @ richardwestenraãœãªã¥ãŒã·ã§ã³ã«ããã€ãã®å€æŽãå ããŸããã å€åããã¯èª°ãã®ããã«åœ¹ç«ã€ã§ãããã
/**
* Find and highlight mention given a matching pattern within a block of text
* <strong i="7">@param</strong> {string} text - The text to parse
* <strong i="8">@param</strong> {array} values - Values to highlight
* <strong i="9">@param</strong> {RegExp} regex - The search pattern to highlight
* <strong i="10">@return</strong> {object} A JSX object containing an array of alternating strings and JSX
*/
const formatMentionText = (text, values, regex) => {
if (!values.length)
return text;
return (<div>
{text.split(regex)
.reduce((prev, current, i) => {
if (!i)
return [current];
return prev.concat(
values.includes(current) ?
<mark key={i + current}>
{current}
</mark>
: current
);
}, [])}
</div>);
};
const text = 'Lorem ipsum dolor sit amet [[Jonh Doe]] and [[Jane Doe]]';
const values = ['Jonh Doe', 'Jane Doe'];
const reg = new RegExp(/\[\[(.*?)\]\]/); // Match text inside two square brackets
formatMentionText(text, values, reg);
// Lorem ipsum dolor sit amet <mark>Jonh Doe</mark> and <mark>Jane Doe</mark>
åæ§ã®åé¡ããããreactããŒã¿ã«ã§è§£æ±ºããŸãããããŒããç°¡åã«èŠã€ããããã«ãæååãdivã«çœ®ãæããcreatePortalã䜿çšããŠreactã³ã³ããŒãã³ãããã®divã«ã¬ã³ããªã³ã°ããŸããã
@rmtnghãªãããªãããããããå¿ èŠãããã®ãââèå³ããããŸãã ããéããããããªãããã§ãã éåå¿ã³ãŒããã€ã³ã¿ãŒã¬ãŒã¹ããŠããŸããïŒ
ãã®åé¡ã®è§£æ±ºçã«ã€ããŠã¯ã string-replace-to-array
ãå§ãããŸãïŒç§ã¯èè
ã§ãïŒã ããã¯ãè€æ°ã®ç°å¢ã§ã®æŠããšæéã®ãã¹ããè¡ââãããŠããŸãã ãŸããéåžžã«å°ããã§ãïŒã©ã€ãã©ãªå
šäœããã®ãã¡ã€ã«https://github.com/oztune/string-replace-to-array/blob/master/string-replace-to-array.jsã§ãïŒã
æ£èŠè¡šçŸã䜿çšãã䜿çšäŸã次ã«ç€ºããŸãã
import replace from 'string-replace-to-array'
// The API is designed to match the native 'String.replace',
// except it can handle non-string replacements.
replace(
'Hello Hermione Granger...',
/(Hermione) (Granger)/g,
function (fullName, firstName, lastName, offset, string) {
return <Person firstName={ firstName } lastName={ lastName } key={ offset } />
}
)
// output: ['Hello ', <Person firstName="Hermione" lastName="Granger" key={ 0 } />, ...]
@oztuneè¿ä¿¡ããããšãããããŸãããã®å ŽåãCMSã®wysiwygãšãã£ã¿ãŒããã®äžé£ã®htmlããŒã¯ã¢ãããããããã®ããŒã¯ã¢ããå
ã®ç¹å®ã®å Žæã«åå¿ã³ã³ããŒãã³ããé
眮ããããšæããŸãã
ããŒã¿ã«ã䜿çšãããããã©ã€ãã©ãªã䜿çšããæ¹ãè¯ããšæããŸããïŒ ããŒã¿ã«ãè¡ãããšã¯ãéåžžã®ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãããããè²»çšãããããªãæãè¿ãããŒãã§ã¯ãªããå¥ã®ããŒãå
ã«ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããšã ãšæããŸããè¿œå ã®æé ã¯ããã€ãã£ãjsreplaceã§å®è¡ã§ããæååã眮ãæããããšã ãã§ãã
ç§ã¯äœãã足ããªãã®ã§ããïŒ ä»£ããã«ã©ã€ãã©ãªã䜿çšããããšã«äœãå©ç¹ã¯ãããŸããïŒ
@rmtnghããã¯ããªããããããšããŠããããšã«äŸåãããšæããŸãã DOMããªãŒã®ããŸããŸãªé åã«Reactã³ã³ããŒãã³ããæ£åšãããããšããŠããŠãããªãŒããŸã Reactã§ã¬ã³ããªã³ã°ãããŠããªãå Žåã¯ãããŒã¿ã«ãæé©ã§ãã ç§ãèšåããæ¹æ³ã¯ã亀æããããšããŠããããŒãããã§ã«Reactã³ã³ããŒãã³ãå ã«ã¬ã³ããªã³ã°ãããŠããå Žåã«æã圹ç«ã¡ãŸãã
ããã¹ããšãã¿ãŒã³ãæå®ããŠããŒãã®é åãè¿ãã³ãŒãã¯æ¬¡ã®ãšããã§ãã
const highlightPattern = (text, pattern) => {
const splitText = text.split(pattern);
if (splitText.length <= 1) {
return text;
}
const matches = text.match(pattern);
return splitText.reduce((arr, element, index) => (matches[index] ? [
...arr,
element,
<mark>
{matches[index]}
</mark>,
] : [...arr, element]), []);
};
ããããšã@wojtekmaj
ãã¿ãŒã³ã®ã°ã«ãŒãã®ç§ã®ããŒãžã§ã³ïŒ
const replacePatternToComponent = (text, pattern, Component) => {
const splitText = text.split(pattern);
const matches = text.match(pattern);
if (splitText.length <= 1) {
return text;
}
return splitText.reduce((arr, element) => {
if (!element) return arr;
if(matches.includes(element)) {
return [...arr, Component];
}
return [...arr, element];
},
[]
);
};
const string = 'Foo [first] Bar [second]';
const pattern = /(\[first\])|(\[second\])/g;
replacePatternToComponent(string, pattern, <Component />);
ã¿ã€ãã¹ã¯ãªããã䜿çšããã¢ãããŒãïŒ
const formatString = (
str: string,
formatingFunction?: (value: number | string) => React.ReactNode,
...values: Array<number | string>
) => {
const templateSplit = new RegExp(/{(\d)}/g);
const isNumber = new RegExp(/^\d+$/);
const splitedText = str.split(templateSplit);
return splitedText.map(sentence => {
if (isNumber.test(sentence)) {
const value = values[Number(sentence)];
return Boolean(formatingFunction) ? formatingFunction(value) : value;
}
return sentence;
});
};
䜿çšäŸïŒ
const str = '{0} test {1} test';
formatString(str, value => <b>{value}</b>, value1, value2);
çµæïŒ
<b>value1</b> test <b>value2</b> test
@rmtngh createportalãä»ããŠããŒã¯ã¢ããã®åŒ·åãã©ã®ããã«éæãããã®ãµã³ãã«ãæäŸã§ããŸããïŒ ç§ã¯åãããšãããããšæã£ãŠããŸãã
@Dashueã¢ã€ãã¢ã¯ãHTMLæååãšãããã©ã®çšåºŠå¶åŸ¡ã§ãããã«å¿ããŠãããŒã¯ã¢ããå
ã«åå¿ã³ã³ããŒãã³ãã®ã¿ãŒã²ãããäœæããããšã§ãã
ãµãŒããŒåŽã§å€æŽã§ããå Žåã¯ãèŠçŽ ã«IDãæå®ããããšããå§ãããŸãã äœãã®ãããªãã® ïŒ
<div id="component_target_1"></div>
ãããŠreactå
ã§ãæ£èŠè¡šçŸã䜿çšããŠ\id="(component_target_\d)"\g
ãæ¢ããIDïŒstate.targetsïŒãä¿åããŠãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŸãã
let mappedComponents
if(this.state.targets && this.state.targets.length){
mappedComponents = this.state.targets.map((id,index)=><MyComponent id={id} key={id} />)
}
ããããMyComponentãã®ãµã³ãã«ã§ãã
import React from 'react'
import ReactDOM from 'react-dom'
export default class MyComponent extends React.Component {
constructor(props) {
super(props)
}
getWrapper(){
return document.getElementById(this.props.id)
}
render() {
if(!this.getWrapper()) return null
const content = <div>
Hello there! I'm rendered with react.
</div>
return ReactDOM.createPortal(
content,
this.getWrapper(),
);
}
}
HTMLæååãããŸââãå¶åŸ¡ã§ããªãå Žåã§ããåãã¢ãããŒãã䜿çšã§ããŸããããã€ãã®èŠçŽ ãèŠã€ããŠãã¿ãŒã²ããèŠçŽ ãæååã«æ¿å ¥ããå¿ èŠãããå ŽåããããŸãã
çŽ æŽãããã¹ã¬ããã®äººïŒ
ç§ã¯ããã®ã¹ã¬ããã®ã¢ã€ãã¢ã®ããã€ããå®è£ ããåçŽãªReact Text Highlighterãã³ãäœæããŸããïŒããã€ãã®è¿œå ã®éæ³ã䜿çšããŠ...ïŒãå°æ¥ã®èšªåè ãããã圹ç«ã€ããšãé¡ã£ãŠããŸãã
ãããmap
ã䜿çšãã解決çã§ãã
ããã§@sophiebitsãœãªã¥ãŒã·ã§ã³ããã©ãŒã¯ããŸãïŒ
const reg = new RegExp(/(\bmoo+\b)/, 'gi');
const parts = text.split(reg);
return <div>{parts.map(part => (part.match(reg) ? <b>{part}</b> : part))}</div>;
çŸãããœãªã¥ãŒã·ã§ã³@ rehat101
ãããç§ã®å Žåã«æãå¹æçãªãã®ã§ã-ã¹ããŒã¹æåã§åå²ããç¹å®ã®åèªãæ¢ããŸãã
HTMLã§ã¯å°ãé¢åã§ããã誰ãæ°ã«ããŸããð
ðæ£èŠè¡šçŸãšãããããããã¯ãµã€ã³ãŒãããã«ããŸãã ððð
const Speech = ({ speech, speeches, setSpeeches, i, text }) => {
const highlightRegExp = new RegExp(
/you|can|do|it|puedes|hacerlo|pingÃŒinos|son|bellos/,
"gi"
);
const delineator = " ";
const parts = text.split(delineator);
return (
<div>
{parts.map(part =>
part.match(highlightRegExp) ? <b>{part + " "}</b> : part + " "
)}
</div>
);
};
çŸãã@ rehat101
react-string-replace
ãèŠä»¶ã«åããªãå ŽåïŒ
çŽ æŽãããïŒ ã»ãšãã©ã®å Žåãå®éã«å ã®æååã«ã¢ã¯ã»ã¹ããå¿ èŠããããããéåžžã«äŸ¿å©ã§ãã
@nullhookã®ãœãªã¥ãŒã·ã§ã³ãå°ããªãã¡ã¯ã¿ãªã³ã°ããŠãã¯ãšãªããå€æ°ãåãå
¥ããGoogleæ€çŽ¢ã®ãªãŒãã³ã³ããªãŒãã®åäœãæš¡å£ããããã«ããŸããjs
const highlightQueryText = (text: string, filterValue: string) => {
const reg = new RegExp(`(${filterValue})`, 'gi');
const textParts = text.split(reg);
return (
<span style={{ fontWeight: 600 }}>
{textParts.map(part => (part.match(reg) ? <span style={{ fontWeight: 'normal' }}>{part}</span> : part))}
</span>
);
};
ããã§ãDOMPurifyãå®è£ ããŠhtmlæååããµãã¿ã€ãºããããã®html-react-parserãå®è£ ããŠãã¿ãŒã²ãããšãªãããŒã¯ã¢ãããèŠã€ãããããJSXã³ã³ããŒãã³ãã«å€æãããšããçŽ æŽãããçµã¿åãããèŠã€ããŸãã-äŸãšããŠãæž¡ãããå°éå ·ã䜿çšããRebassã䜿çšããŸãã 2ã€ã®ããã±ãŒãžã¯ãç¬èªã®ããŒãµãŒãããŒã«ãããªãŒããŒããããåé¿ããã®ã«åœ¹ç«ã¡ãŸãããµãã¿ã€ãºãªãã§ãã®ããŒãµãŒããã±ãŒãžããå§ãããŸããã ããã«èŠåŽããŠãã人ã®ããã«ããããããã®codepenã®äŸ¡å€ã調ã¹ãŠãã ããïŒ ã æ¹åã«é¢ãããã£ãŒãããã¯ã倧æè¿ã§ãã
ãããžã§ã·ãŒã
ããã¯ãããã¹ããååŸããŠæ¬¡ã®ããã«å€æããããã®éåžžã«åªããã³ã³ãã®ããã§ãã
ã³ã³ããŒãã³ããåå¿ãããŠãã ããïŒ ã®éšåã亀æããã®ã«ééããªãè¯ãã§ããã
ã³ã³ããŒãã³ããå«ãæååã
å ±æããŠããã ãããããšãããããŸãã
JAMstackãµã€ãã§ãMarkdownãã³ã³ããŒãã³ãã«å€ããã®ã«ã圹ç«ã¡ãŸãã
ãããããé¡ãããŸãã
ãã¬ã¯
ãã¬ã¯ã»Rã»ãªãŒã¹ãã£ã³ãPTãDPTãMSãBCTMBãLMTãCSCS
LinkedInã«åå ããŠãã ããïŒ //www.linkedin.com/in/derek-austin/
æ°Žã2020幎2æ26æ¥ã«ã¯ã16:35ãžã§ã·ãŒã«ã€ã¹[email protected]ã¯æžããŸããïŒ
ã ããç§ã¯HTMLããµãã¿ã€ãºããããã«DOMPurifyãå®è£ ããçŽ æŽãããçµã¿åãããèŠã€ããŸãã
html-react-parserãå«ãæååã§ãã¿ãŒã²ãããšãªãããŒã¯ã¢ãããæ€çŽ¢ããŠå€æããŸã
JSXã³ã³ããŒãã³ããž-äŸãšããŠãæž¡ãããå°éå ·ã䜿çšããRebassã䜿çšããŸãã
éåžžã«ããŸãåºãŠããŸããã2ã€ã®ããã±ãŒãžã¯ãªãŒããŒããããåé¿ããã®ã«åœ¹ç«ã¡ãŸã
ç¬èªã®ããŒãµãŒãããŒãªã³ã°ããå Žåããã®ããŒãµãŒããã±ãŒãžã¯ãå§ãããŸãã
æ¶æ¯ãªãã ããã«èŠåŽããŠãã人ã®ããã«ãŸã å€åã¹ã³ãŒãã¢ãŠã
ããã䟡å€ããããã®ã®ããã®ãã®codepenïŒ
https://codesandbox.io/s/eager-wiles-5hpffã æ¹åã«é¢ãããã£ãŒãããã¯
ãšãŠãæè¬ããŠããŸããâ
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/react/issues/3386?email_source=notifications&email_token=AMV42QTV4FDXZIFXCGB3NZDRE3OATA5CNFSM4A5VRBI2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2Z
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AMV42QXARIOKOYSJ4C5IFQLRE3OATANCNFSM4A5VRBIQ
ã
split
é¢æ°ãæ£èŠè¡šçŸã§äœ¿çšããŠããã次ã®ããã«ãã£ããã£ãããããŒãã眮ãæããããšãã§ããŸããvar parts = "I am a cow; cows say moo. MOOOOO.".split(/(\bmoo+\b)/gi); for (var i = 1; i < parts.length; i += 2) { parts[i] = <span className="match" key={i}>{parts[i]}</span>; } return <div>{parts}</div>;
äžæãªç¹ãããå Žåã¯ãç¥ãããã ããã
ããã¯ããŸããããŸãã Angularã§åäœãããæ¹æ³ã¯ãããŸããïŒ ããªãã®ã³ãŒãã䜿çšããŠãããã«ã€ããŠã®è³ªåãæçš¿ããŸããïŒ
https://stackoverflow.com/questions/60889171/wrap-certain-words-with-a-component-in-a-contenteditable-div-in-angular
ããã«ã¡ã¯å人ãç§ã¯ããªãã®å©ããå¿ èŠã§ããç§ã¯React Nativeã䜿çšããŠããŸãããããŠç§ãããå¿ èŠãããã®ã¯ç§ãDBããæœåºããããã¹ããããã©ãŒãããïŒãã©ã³ãã®è²ããªã³ã¯ïŒãé©çšããŠ@ã¡ã³ã·ã§ã³ãäœæããããš@ã¡ã³ã·ã§ã³ãããå Žåããšã©ãŒãçºçããŸãã
/////ããã¹ãã®äŸïŒ _heyäœãèµ·ãã£ãã®ã@ -idïŒ1-ãã¹ãŠå€§äžå€«??
////ãã®é
åãlistusersãäŸïŒ[idusuarioïŒ "1"ãusuarioïŒ "@luigbren"ãformatïŒ "@ -idïŒ1-" .....]
const PatternToComponent = (text, usuarios,) => {
let mentionsRegex = new RegExp(/@-(id:[0-9]+)-/, 'gim');
let matches = text.match(mentionsRegex);
if (matches && matches.length) {
matches = matches.map(function (match, idx) {
let usrTofind = matches[idx]
//////////////////////////////////////////////////////////////////
const mentFormat = listusers.filter(function (item) {
const itemData = item.format;
return itemData.indexOf(usrTofind) > -1;
});
if (mentFormat.length > 0) {
let idusuario = mentFormat[0].idusuario
let replc = mentFormat[0].usuario
console.log(usrTofind) //// here find @-id:1-
console.log(replc) //// here is <strong i="12">@luigbren</strong> for replace
////////// now here replace part of the string, @-id:1- with a <Text> component
///////// with <strong i="13">@luigbren</strong> and the link, this is repeated for every <strong i="14">@mention</strong> found
parts = text.split(usrTofind);
for (var i = 1; i < parts.length; i += 2) {
parts[i] = <Text key={i} style={{ color: '#00F' }} onPress={() => { alert('but this is'); }}>{replc}</Text>;
}
return text = parts;
/////////////////////////////////////////////////////////////////////
} else {
return text
}
});
} else {
return text
}
return text
};
ãã®ããã«ãã³ãŒãã¯ãããã¹ãã«èšåã1ã€ãããªãå Žåã«ã®ã¿ããŸãæ©èœããŸããããšãã°ãã_ hey what going @ -idïŒ1- all ok ?? _ãã§ãããè€æ°ã®èšåãé 眮ãããšãšã©ãŒãçºçããŸãã ãäŸïŒ '_ heyäœãèµ·ãã£ãã®ã@ -idïŒ1-ãã¹ãŠå€§äžå€«?? @ -idïŒ2- @ -idïŒ3 -_'...ãšã©ãŒïŒ
html-react-parser
ã䜿çšããŠæååã解æããããŒãåã§jsxã³ã³ããŒãã³ãã«çœ®ãæããããšãã§ããŸãã ãã®ã¿ã€ãã®çœ®æã§ã¯ãæååã眮æããããšã§åå¿èŠçŽ ãåçã«äœ¿çšã§ããŸãã
parse(body, {
replace: domNode => {
if (domNode.name === 'select') { // or
return React.createElement(
Select, // your react component
{ },
domToReact(domNode.children)
);
}
}
æååã®react-router-dom
ã眮ãæããæ¹æ³ãæããŠãã ããã
äŸïŒ
var text = "Are You okay <strong i="9">@sara</strong> ?";
var href= <Link to={{
pathname: '/user/sara',
}}> <strong i="10">@sara</strong> </Link>;
var replace = text.replace("@sara", href);
//output : Are You okey [Object Object] ?
[ãªããžã§ã¯ããªããžã§ã¯ã]ã誰ãªã®ãæ¬åœã«ããããŸãããïŒ ãAreyouOkay @saraããšèšããŸããããã®ã³ãŒãã¯ä»ã®èª°ããåŒã³åºããŸããïŒ
react-native
ã§ãã»ãŒåã質åããããŸãã誰ãå©ããŠããã ããã°å¹žãã§ãã
ãã®ããã±ãŒãžhttps://www.npmjs.com/package/regexify-string以å€ã¯äœãæ©èœããŸããã§ãã
ç§ã¯ãã®é¢æ°ã䜿çšããŠããŸãïŒ
export const replaceWithHtml = (
text: string,
textToReplace: string,
replaceValue: any,
): any[] => {
const delimiter = '|||||'
return text && text.includes(textToReplace)
? text
.replace(textToReplace, `${delimiter}${textToReplace}${delimiter}`)
.split(delimiter)
.map((i) => {
if (i === textToReplace) {
return replaceValue
} else {
return i || null
}
})
: text
}
ãã®ããã«ïŒ
const text = 'This is an [icon]'
replaceWithHtml(
text,
'[icon]',
<i className="icon-cogs" />,
)
ç¹å®ã®ããŒã¯ãŒããç¹å®ã®èŠçŽ ã«çœ®ãæããããã®åçŽãªè£éããŒã«ãå¿ èŠã§ããã
åºåã®èŠçŽ æ°ãæžããããã«ã React.Fragment
ãŸãã
const interpolate = (text, values) => {
const pattern = /([$0-9]+)/g
const matches = text.match(pattern)
const parts = text.split(pattern)
if (!matches) {
return text
}
return parts.map((part, index) => (
<Fragment key={part + index}>{matches.includes(part) ? values[part] : part}</Fragment>
))
}
// ...
<p>
{interpolate('$1 with $2 is fun!', {
$1: <em>Playing</em>,
$2: <strong>JavaScript</strong>,
})}
</p>
// <p><em>Playing</em> with <strong>JavaScript</strong> is fun!</p>
split()
ã®ã¢ã€ãã¢ãããããšã@ sophiebitsð
@pedrodurekã®ãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠããããç§ã®ç¹å®ã®ããŒãºã«å¯Ÿå¿ãããã®ã§ãïŒæ°åã ãã§ãªãèªã¿åãå¯èœãªããŒã䜿çšãã翻蚳ïŒïŒ
export const insertComponentsIntoText = (
str: string,
replacements: {
[key: string]: React.ReactNode
}
) => {
const splitRegex = new RegExp(/\[\[(\w*)\]\]/g);
const parts = str.split(splitRegex);
return parts.map(part => {
if (replacements.hasOwnProperty(part)) {
return replacements[part];
}
return part;
});
};
äŸïŒ
insertComponentsIntoText(`"Please accept our [[privacyPolicyLink]] and [[termsLink].", {
"privacyPolicyLink": <a key="privacyPolicyLink" href="/privacy">Privacy Policy</a>,
"termsLink": <a key="termsLink" href="/terms">Terms and Conditions</a>
})
...ã«ãªã...
Please accept our <a key="privacyPolicyLink" href="/privacy">Privacy Policy</a> and <a key="termsLink" href="/terms">Terms and Conditions</a>.
ïŒå®éã«ã¯é åã«ãªããããããŒãå¿ èŠã§ããreactã¯ãããŒã®ãªãé åèŠçŽ ã奜ã¿ãŸãããïŒ
ãã®ããã±ãŒãžhttps://www.npmjs.com/package/regexify-string以å€ã¯äœãæ©èœããŸããã§ãã
ç§ãã ããããã¹ãŠãè©ŠããŠã¿ãŸãããããã®ããã±ãŒãžã®ã¿ãæ©èœããŸãã ããããšãïŒ
æãåèã«ãªãã³ã¡ã³ã
split
é¢æ°ãæ£èŠè¡šçŸã§äœ¿çšããŠããã次ã®ããã«ãã£ããã£ãããããŒãã眮ãæããããšãã§ããŸããäžæãªç¹ãããå Žåã¯ãç¥ãããã ããã