如果文本以这些字符开头或结尾,请删除字符

Hen*_*son 4 javascript regex jquery

我有一个带有用户输入文本变量的jQuery函数sel.我像这样显示变量:

jQuery(this).parent().prev().find('.js-trigger-add-tag-target').text(sel);
Run Code Online (Sandbox Code Playgroud)

工作良好.

如果变量以任何这些字符开头结尾:

.,?!'"
Run Code Online (Sandbox Code Playgroud)

我想剥去那些角色.例如,如果sel是:

'Hello world, josh's car.,'
Run Code Online (Sandbox Code Playgroud)

我想把它剥离到:

Hello world, josh's car
Run Code Online (Sandbox Code Playgroud)

我如何在jQuery/javascript中执行此操作?也许正则表达式?

Tus*_*har 10

您可以使用String#replaceRegEx

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

RegEx说明:

  1. ^:线锚的开始
  2. $:行锚的结束
  3. [.,?!'"]+:匹配角色类 中的任何字符,[]以任何顺序出现一次或多次
  4. |:RegEx中的OR条件/变更
  5. g:全球旗帜

RegEx101现场演示

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);
Run Code Online (Sandbox Code Playgroud)
<input type="text" id="myInput" placeholder="Type something" />

<div id="output">You'll see output here</div>
Run Code Online (Sandbox Code Playgroud)


来自OP的评论

如何调整正则表达式,以便在变量以's?结尾时删除字符?例如,如果变量是John的,那么它将成为John

可以's在字符串的末尾稍微修改RegEx以匹配.

字符类可以是lazy/non-greedy,并's在字符串末尾添加为可选组.

/^[.,?!'"]+|[.,?!'"]*?(?:'s)?$/
Run Code Online (Sandbox Code Playgroud)

添加?[.,?!'"]*?将比赛懒惰.(?:)非捕获组和添加?(?:'s)?将会使's可选.

RegEx演示

或者,正如@Daniel Cheung评论中所说,你也可以使用

/^[.,?!'"]+|(?:[.,?!'"]|'s)+$/
Run Code Online (Sandbox Code Playgroud)

RegEx演示

更新:

要删除空格,\s可以在角色类中添加.或者String#trim也可以在'替换后使用.

/^[.,?!'"\s]+|[.,?!'"\s]+$/
         ^^          ^^
Run Code Online (Sandbox Code Playgroud)

RegEx演示


正如指出的评论通过@Casimir等伊波利特,您可以使用^[\W_]+|[\W_]+$除去开头和末尾的所有特殊字符的字符串.

  • 这很棒.我会接受这个答案,并给它50分!只是最后一个问题.如果文本在结尾或开头有空格,则不起作用.你可以调整正则表达式来忽略开头或结尾的空格吗? (2认同)