# Small and fast HTML matcher
Finds matching opening and closing tag pair for given location in HTML/XML source:
```js
import match from '@emmetio/html-matcher';
const content = '
';
// Find tag pair at character 35
const tag = match(content, 35);
console.log(tag.name); // Name of matched tag: "a"
console.log(tag.open); // Range of opening tag: [5, 31]
console.log(tag.end); // Range of closing tag: [38, 42]
// List of attributes found in opening tag
console.log(tag.attributes);
```
By default, matcher works in HTML, which means if it finds tag name which is known to be empty (for example, `
`) it will not search for it’s closing part. However, such behavior might be unexpected for XML syntaxes where all tags should be either self-closed or provide closing part. In this case, you should pass `xml: true` option to properly handle XML mode:
```js
import match from '@emmetio/html-matcher';
const content = '![]()
Caption
';
const html = match(content, 8);
const xml = match(content, 8, { xml: true });
console.log(html.name); // "img"
console.log(html.open); // [5, 10]
console.log(html.close); // undefined
console.log(xml.name); // "img"
console.log(xml.open); // [5, 10]
console.log(xml.close); // [17, 23]
```
## Special tags
In HTML, some tags has special meaning. For example, a `` tag. But, if `