您可以使用String#replace
用正则表达式
var regex = /^[.,?!'"]+|[.,?!'"]+$/g;
text = text.replace(regex, '');
正则表达式说明:
^
:开头的行anchor
$
的:行尾anchor
[.,?!'"]+
:匹配的任何字符的是,在任何顺序
|
发生一次或多次character class[
和]
:在正则表达式OR condition/alteration
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 Cheung在comment说,你也可以使用
/^[.,?!'"]+|(?:[.,?!'"]|'s)+$/
RegEx Demo
更新:
要删除空格\s
中可以添加cha类别。或者String#trim
也可以在`替换后使用。
/^[.,?!'"\s]+|[.,?!'"\s]+$/
^^ ^^
RegEx Demo
正如@Casimir et Hippolyte在comment所述,您可以使用^[\W_]+|[\W_]+$
来开头删除所有的特殊字符和结束串的。
**非常好!我有个问题。如果变量以**的**结尾,我该如何调整正则表达式以便删除字符?例如,如果变量是** John's **,它将变成** John ** –
@HenrikPetterson'^ [。,?!'“] + |(?:[。,?!'”] |的s )+ $'' –
这太好了。我会接受这个答案,并奖励它50分!只是最后一个问题。如果文本在结尾或开始处有空格,则不起作用。你可以调整正则表达式来忽略开始或结束处的空间吗? –