@cheapsteak/hast-util-find-and-replace v3.0.1
hast-util-find-and-replace
hast utility to find and replace text in a tree.
Install
npm:
npm install hast-util-find-and-replaceUse
var h = require('hastscript')
var inspect = require('unist-util-inspect')
var findAndReplace = require('hast-util-find-and-replace')
var tree = h('p', [
'Some ',
h('em', 'emphasis'),
', ',
h('strong', 'importance'),
', and ',
h('code', 'code'),
'.'
])
findAndReplace(tree, 'and', 'or')
findAndReplace(tree, {emphasis: 'em', importance: 'strong'})
findAndReplace(tree, {
code: function($0) {
return h('a', {href: '//example.com#' + $0}, $0)
}
})
console.log(inspect(tree))Yields:
element[9] [tagName="p"]
├─ text: "Some "
├─ element[1] [tagName="em"]
│ └─ text: "em"
├─ text: ", "
├─ element[1] [tagName="strong"]
│ └─ text: "strong"
├─ text: ", "
├─ text: "or"
├─ text: " "
├─ element[1] [tagName="code"]
│ └─ element[1] [tagName="a"][properties={"href":"//example.com#code"}]
│ └─ text: "code"
└─ text: "."API
findAndReplace(tree, find[, replace][, options])
Find and replace text in a hast tree.
The algorithm searches the tree in preorder for complete values
in Text nodes.
Partial matches are not supported.
Signatures
findAndReplace(tree, find, replace[, options])findAndReplace(tree, search[, options])
Parameters
tree(Node) — hast treefind(stringorRegExp) — Value to find and remove. Whenstring, escaped and made into a globalRegExpreplace(stringorFunction) — Value to insert. Whenstring, turned into aTextnode. WhenFunction, invoked with the results of callingRegExp.execas arguments, in which case it can return aNodeor astring, which is in the latter case wrapped in aTextnodesearch(ObjectorArray) — Perform multiple find-and-replace’s. WhenArray, each entry is a tuple (Array) of afind(at0) andreplace(at1). WhenObject, each key is afind(in string form) and each value is areplaceoptions.ignore(Array, default:['title', 'script', 'style', 'svg', 'math']) — Tag-names of elements not to search. This list can be accessed atfindAndReplace.ignore
Returns
The given, modified, tree.
Security
Improper use of the replace can open you up to a
cross-site scripting (XSS) attack as the value of replace is injected
into the syntax tree.
The following example shows how a script is injected that runs when loaded in a
browser.
findAndReplace(h('p', 'This and that.'), 'and', function() {
return h('script', 'alert(1)')
})Yields:
<p>This <script>alert(1)</script> that.</p>Do not use user input in replace or use hast-util-santize.
Related
hast-util-select—querySelector,querySelectorAll, andmatchesunist-util-select— select unist nodes with CSS-like selectors
Contribute
See contributing.md in syntax-tree/.github for ways to get
started.
See support.md for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.