Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

If text begins or ends with these characters, remove characters

I have a jQuery function with a user input text variable sel. I display the variable like this:

jQuery(this).parent().prev().find('.js-trigger-add-tag-target').text(sel);

Works fine.

If the variable begins or ends with any of these characters:

.,?!'"

I want to to strip those very characters. For example, if sel is:

'Hello world, josh's car.,'

I want to strip it to:

Hello world, josh's car

How do I do this in jQuery/javascript? Maybe regex?

like image 342
Henrik Petterson Avatar asked Dec 14 '22 08:12

Henrik Petterson


1 Answers

You can use String#replace with RegEx

var regex = /^[.,?!'"]+|[.,?!'"]+$/g;
text = text.replace(regex, '');

RegEx Explanation:

  1. ^: Starts of the line anchor
  2. $: End of the line anchor
  3. [.,?!'"]+: Match any of the characters in the character class [ and ] that occur one or more times in any order
  4. |: OR condition/alteration in the RegEx
  5. g: Global flag

RegEx101 Live Demo

var regex = /^[.,?!'"]+|[.,?!'"]+$/g; // Note that you don't need `m` flag here

var resultEl = document.getElementById('output');
document.getElementById('myInput').addEventListener('keyup', function() {
  resultEl.innerHTML = this.value.replace(regex, '');
}, false);
<input type="text" id="myInput" placeholder="Type something" />

<div id="output">You'll see output here</div>

From OP's comment

How do I adjust the regex so that it removes characters if the variable ends with 's? For example, if the variable is John's, it will become John

The RegEx can be modified a bit to match 's at the end of the string.

The character class can be make lazy/non-greedy and adding 's as optional group at the end of string.

/^[.,?!'"]+|[.,?!'"]*?(?:'s)?$/

Adding ? in [.,?!'"]*? will make the match lazy. (?:) is non-capturing group and adding ? in (?:'s)? will make the 's optional.

RegEx Demo

Or, as @Daniel Cheung said in the comment, you can also use

/^[.,?!'"]+|(?:[.,?!'"]|'s)+$/

RegEx Demo

Update:

To remove spaces \s can be added in the character class. Or String#trim can also be used after `replace.

/^[.,?!'"\s]+|[.,?!'"\s]+$/
         ^^          ^^

RegEx Demo


As stated in comment by @Casimir et Hippolyte, you can use ^[\W_]+|[\W_]+$ to remove all the special characters at the beginning and end of the string.

like image 162
Tushar Avatar answered Dec 17 '22 00:12

Tushar