2.2.1 • Published 2 years ago

@sindresorhus/slugify v2.2.1

Weekly downloads
481,845
License
MIT
Repository
github
Last release
2 years 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
hostnamescaoliao-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/fieldsisland-cliapp-channel-managementapp-profile-managementapp-marketing-managementapp-training-managementtabui-generatorssvgtovue-clisveltecmswinrowwp-local-dockerwp-local-docker-generatorstoryblok-translate-slugsstrapi-plugin-content-type-builderstrapi-plugin-content-type-builder-uuidstrapi-plugin-navigationstrapi-plugin-navigation-customstrapi-plugin-content-manager-mockstrapi-plugin-content-manager-pxtstrapi-plugin-content-managertext-runner-corevellum-docvandelay-util@dschulmeis/ls-plugin-markdown@cloudmix-dev/react@cocoon/plugin-tibi@codeanit.com/theme@create-figma-plugin/common@commonalityco/utils-core@daiyam/docz-core@curiousleaf/utils@dada78641/bwstats@darkpay/dark-utils@developersgarage/sourcebit-target-eleventy@coursebuilder/adapter-drizzle@cprecioso/template@by-association-only/cli@bluecadet/launchpad-utils@cangir/gatsby-theme-cms-core@cangir/gatsby-theme-core@payvo/profiles@pdcstly/server-shared@pdcstly/sharedbolttech_check_seojinqrjetblogjsdoc-typing-examplelazyrepo@farnabaz/coregridsome-make@contentedjs/contented-pipeline@contentedjs/contented-pipeline-md@contember/react-form-fields-uinextra-theme-isaiahstream-sacsquint-clisooristrapi-plugin-slug-transliteratestrapi-plugin-slugifystrapi-plugin-slugify-error-fixstrapi-plugin-slugify-transliterationstrapi-provider-upload-google-storagestrapi-utilitystrapi-utilsstrapi-upload-google-storagestrapi-upload-google-storage-testssgssb-webstellatesourcebit-target-hugosourcebit-target-jekyllsourcebit-target-nexttype-args-usagetypedoc-plugin-mdtranspile-md-to-jsontransmit-2-ssh-configutils-patched@arshad/gatsby-theme-core@asd14/blocks@arkecosystem/platform-sdk-profiles
2.2.1

2 years ago

2.2.0

2 years ago

2.1.1

3 years ago

2.1.0

4 years ago

1.1.1

4 years ago

1.1.2

4 years ago

2.0.0

4 years ago

1.1.0

5 years ago

1.0.0

5 years ago

0.11.0

5 years ago

0.10.1

5 years ago

0.10.0

5 years ago

0.9.1

6 years ago

0.9.0

6 years ago

0.8.0

6 years ago

0.7.0

7 years ago

0.6.0

7 years ago

0.5.0

7 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.0

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago