2.2.1 • Published 11 months ago

@sindresorhus/slugify v2.2.1

Weekly downloads
481,845
License
MIT
Repository
github
Last release
11 months ago

slugify

Slugify a string

Useful for URLs, filenames, and IDs.

It handles most major languages, including German (umlauts), Vietnamese, Arabic, Russian, and more.

Install

$ npm install @sindresorhus/slugify

Usage

import slugify from '@sindresorhus/slugify';

slugify('I ♥ Dogs');
//=> 'i-love-dogs'

slugify('  Déjà Vu!  ');
//=> 'deja-vu'

slugify('fooBar 123 $#%');
//=> 'foo-bar-123'

slugify('я люблю единорогов');
//=> 'ya-lyublyu-edinorogov'

API

slugify(string, options?)

string

Type: string

String to slugify.

options

Type: object

separator

Type: string\ Default: '-'

import slugify from '@sindresorhus/slugify';

slugify('BAR and baz');
//=> 'bar-and-baz'

slugify('BAR and baz', {separator: '_'});
//=> 'bar_and_baz'

slugify('BAR and baz', {separator: ''});
//=> 'barandbaz'
lowercase

Type: boolean\ Default: true

Make the slug lowercase.

import slugify from '@sindresorhus/slugify';

slugify('Déjà Vu!');
//=> 'deja-vu'

slugify('Déjà Vu!', {lowercase: false});
//=> 'Deja-Vu'
decamelize

Type: boolean\ Default: true

Convert camelcase to separate words. Internally it does fooBarfoo bar.

import slugify from '@sindresorhus/slugify';

slugify('fooBar');
//=> 'foo-bar'

slugify('fooBar', {decamelize: false});
//=> 'foobar'
customReplacements

Type: Array<string[]>\ Default: [ ['&', ' and '], ['🦄', ' unicorn '], ['♥', ' love '] ]

Add your own custom replacements.

The replacements are run on the original string before any other transformations.

This only overrides a default replacement if you set an item with the same key, like &.

import slugify from '@sindresorhus/slugify';

slugify('Foo@unicorn', {
	customReplacements: [
		['@', 'at']
	]
});
//=> 'fooatunicorn'

Add a leading and trailing space to the replacement to have it separated by dashes:

import slugify from '@sindresorhus/slugify';

slugify('foo@unicorn', {
	customReplacements: [
		['@', ' at ']
	]
});
//=> 'foo-at-unicorn'

Another example:

import slugify from '@sindresorhus/slugify';

slugify('I love 🐶', {
	customReplacements: [
		['🐶', 'dogs']
	]
});
//=> 'i-love-dogs'
preserveLeadingUnderscore

Type: boolean\ Default: false

If your string starts with an underscore, it will be preserved in the slugified string.

Sometimes leading underscores are intentional, for example, filenames representing hidden paths on a website.

import slugify from '@sindresorhus/slugify';

slugify('_foo_bar');
//=> 'foo-bar'

slugify('_foo_bar', {preserveLeadingUnderscore: true});
//=> '_foo-bar'
preserveTrailingDash

Type: boolean\ Default: false

If your string ends with a dash, it will be preserved in the slugified string.

For example, using slugify on an input field would allow for validation while not preventing the user from writing a slug.

import slugify from '@sindresorhus/slugify';

slugify('foo-bar-');
//=> 'foo-bar'

slugify('foo-bar-', {preserveTrailingDash: true});
//=> 'foo-bar-'
preserveCharacters

Type: string[]\ Default: []

Preserve certain characters.

It cannot contain the separator.

For example, if you want to slugify URLs, but preserve the HTML fragment # character.

import slugify from '@sindresorhus/slugify';

slugify('foo_bar#baz', {preserveCharacters: ['#']});
//=> 'foo-bar#baz'

slugifyWithCounter()

Returns a new instance of slugify(string, options?) with a counter to handle multiple occurrences of the same string.

Example

import {slugifyWithCounter} from '@sindresorhus/slugify';

const slugify = slugifyWithCounter();

slugify('foo bar');
//=> 'foo-bar'

slugify('foo bar');
//=> 'foo-bar-2'

slugify.reset();

slugify('foo bar');
//=> 'foo-bar'

Use-case example of counter

If, for example, you have a document with multiple sections where each subsection has an example.

## Section 1

### Example

## Section 2

### Example

You can then use slugifyWithCounter() to generate unique HTML id's to ensure anchors will link to the right headline.

slugify.reset()

Reset the counter

Example

import {slugifyWithCounter} from '@sindresorhus/slugify';

const slugify = slugifyWithCounter();

slugify('foo bar');
//=> 'foo-bar'

slugify('foo bar');
//=> 'foo-bar-2'

slugify.reset();

slugify('foo bar');
//=> 'foo-bar'

Related

  • slugify-cli - CLI for this module
  • transliterate - Convert Unicode characters to Latin characters using transliteration
  • filenamify - Convert a string to a valid safe filename
@prisma/migratehostnamescaoliao-plugin-content-type-builderrsn-node-core@mutantlove/blockssphidoweb-server-node@spherehq/cli@45air/air-local-dockerswiss-post-internet-headercreate-itoa-5-apphahnbee-testhahnbee-test-client@picker-cc/coreberserk-plugin-content-managerberserk-plugin-content-type-builderberserk-utilssao-go-api@infinitebrahmanuniverse/nolb-_sin@everything-registry/sub-chunk-837@peakfijn/cli-sdk-templates@itoa/fields@daiyam/docz-core@deconz-community/directus-extension-ddf-store@deedat5/keystone-core@dawncms/connectors@dawncms/storage@dbosoft/nextjs-docsdeploy-pr-actiondexon-nuxt-cookie@developersgarage/sourcebit-target-eleventydatoit-plugin-content-managerdatoit-plugin-content-type-builderdatoit-utils@dschulmeis/ls-plugin-markdown@datenguide/explorables@davidsemakula/keystone-adapter-mongoose@davidsemakula/keystone-fieldsfiber-linkfuton-mediafuton-media-cliftl-netlify-builddraaftdocz-coredocz-plugin-storybookdocmdocm-coredirectus-extension-okamdirectus-extension-psutarchive-bundledisco-schemaseleventy-plugin-pack11tyexecliexp-server@hamberjs/site-kitnitropagenickhsine-k5-fields@google-cloud/nodejs-repo-tools@gluons/vue-up@gluons/vue-pack@greatcloak/eleventyhttp-snapshotter@heartsradiant/blocks@heypal/toolkit-aiintertwine@horizr/cli@hooleyandburch/gridsomenovelupdates.jsisland-clinpm-name-clinoickare-utils@highlightjs/generator@generates/kdot@gaiama/slugger@grucloud/bausaurusnode-atlas-obscura@huiweitech/matrix-generators@huiweitech/matrix-plugin-content-type-buildernuxt-navieasy-toc@cloudmix-dev/react@blunodes.com/site-kit@cloudcannon/readergridsome@epic-web/workshop-app@esgehtest/strapi-plugin-sghp-navgraphcdn@eox/storytelling@eluvio/elv-client-js@elv1n/docz-coregatsby-plugin-functionsgatsby-post-managergatsby-plugin-printergatsby-plugin-page-creatorgatsby-plugin-og-image@edgeandnode/go@educandu/educandugenerator-nsis@editorialapp/datatoolsgoogle-meet-cli@flatbread/transformer-yaml
2.2.1

11 months ago

2.2.0

1 year ago

2.1.1

2 years ago

2.1.0

3 years ago

1.1.1

3 years ago

1.1.2

3 years ago

2.0.0

3 years ago

1.1.0

4 years ago

1.0.0

4 years ago

0.11.0

4 years ago

0.10.1

4 years ago

0.10.0

4 years ago

0.9.1

5 years ago

0.9.0

5 years ago

0.8.0

5 years ago

0.7.0

5 years ago

0.6.0

5 years ago

0.5.0

5 years ago

0.4.0

6 years ago

0.3.0

6 years ago

0.2.0

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago