我有一个字符串,我想从单词的开头或结尾删除任何- ,( ,) ,& ,$ ,# ,! ,[ ,] ,{ ,} ," ,'
。如果它在单词之间就是忽略那些。
以下是一个例子:
var $string = "Hello I am a string, and I am called Jack-Tack!. My -mom is Darlean.";
我希望上面的文字在正则表达式之后是这样的:
console.log("Hello I am a string and I am called Jack-Tack My mom is Darlean");
答案 0 :(得分:8)
您可以使用这样的事实:正则表达式中的\b
始终匹配字边界,而\B
仅匹配没有字边界的情况。你想要的只是当它的一侧有一个单词边界而不是另一面有字边界时才删除这组字符。这个正则表达式应该:
var str = "Hello I'm a string, and I am called Jack-Tack!. My -mom is Darlean.";
str = str.replace(/\b[-.,()&$#!\[\]{}"']+\B|\B[-.,()&$#!\[\]{}"']+\b/g, "");
console.log(str); // Hello I'm a string and I am called Jack-Tack My mom is Darlean
答案 1 :(得分:1)
这是我刚创建的一个。它可能会被简化,但它可以工作。
"Hello I am a string, and I am called Jack-Tack!. My -mom is Darlean."
.replace(/(?:[\(\)\-&$#!\[\]{}\"\',\.]+(?:\s|$)|(?:^|\s)[\(\)\-&$#!\[\]{}\"\',\.]+)/g, ' ')
.trim();
答案 2 :(得分:1)
用空字符串替换此正则表达式。
/(?<=\s)[^A-Z]+?(?=\w)|(?<=\w)[^a-z]*?(?=\s|$)/gi
//Explanation:
/
(?<=\s)[^A-Z]+?(?=\w) //Find any non-letters preceded by a space and followed by a word
| //OR
(?<=\w)[^a-z]*?(?=\s|$) //Any non-letters preceded by a work and followed by a space.
/gxi