2016-02-13 88 views
2

我有一个带有用户输入文本变量sel的jQuery函数。我显示这样的变量:如果文本以这些字符开头或结尾,请删除字符

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

工作正常。

如果变量开始结束任何与这些字符:

.,?!'" 

欲剥离的那些非常字符。例如,如果sel是:

'Hello world, josh's car.,' 

我想将它剥离到:

Hello world, josh's car 

如何在jQuery的/ JavaScript的做到这一点?也许正则表达式?

回答

8

您可以使用String#replace用正则表达式

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

正则表达式说明:

  1. ^:开头的行anchor
  2. $的:行尾anchor
  3. [.,?!'"]+:匹配的任何字符的是,在任何顺序
  4. |发生一次或多次character class[]:在正则表达式OR condition/alteration
  5. g:全局标志

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>


从OP的comment

如何调整正则表达式,以便它如果变量与's结束删除字符?例如,如果变量是约翰的,它将成为约翰

正则表达式可以修改了一下,在字符串的结尾匹配's

字符类可以变成懒/非贪心,并且在字符串结尾添加's作为可选组。

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

添加?[.,?!'"]*?会使比赛lazy(?:)non-capturing group并且在(?:'s)?中加入?将使得's可选。

RegEx Demo

或者,如@Daniel Cheungcomment说,你也可以使用

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

RegEx Demo

更新:

要删除空格\s中可以添加cha类别。或者String#trim也可以在`替换后使用。

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

RegEx Demo


正如@Casimir et Hippolytecomment所述,您可以使用^[\W_]+|[\W_]+$开头删除所有的特殊字符和结束串的

+0

**非常好!我有个问题。如果变量以**的**结尾,我该如何调整正则表达式以便删除字符?例如,如果变量是** John's **,它将变成** John ** –

+0

@HenrikPetterson'^ [。,?!'“] + |(?:[。,?!'”] |的s )+ $'' –

+2

这太好了。我会接受这个答案,并奖励它50分!只是最后一个问题。如果文本在结尾或开始处有空格,则不起作用。你可以调整正则表达式来忽略开始或结束处的空间吗? –

相关问题