Package Exports
- hast-util-find-and-replace
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (hast-util-find-and-replace) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
hast-util-find-and-replace
hast utility to find and replace text in a tree.
Install
npm:
npm install hast-util-find-and-replace
Use
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
(string
orRegExp
) — Value to find and remove. Whenstring
, escaped and made into a globalRegExp
replace
(string
orFunction
) — Value to insert. Whenstring
, turned into aText
node. WhenFunction
, called with the results of callingRegExp.exec
as arguments, in which case it can return aNode
or astring
(which is wrapped in aText
node), orfalse
to not replacesearch
(Object
orArray
) — Perform multiple find-and-replaces. WhenArray
, each entry is a tuple (Array
) of afind
(at0
) andreplace
(at1
). WhenObject
, each key is afind
(in string form) and each value is areplace
options.ignore
(Test
, default:['title', 'script', 'style', 'svg', 'math']
) — Anyhast-util-is-element
compatible test. The default 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
, andmatches
unist-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.