【问题标题】:Remove punctuation from beginning and end of words in a string从字符串中单词的开头和结尾删除标点符号
【发布时间】:2011-08-18 15:54:53
【问题描述】:

我有一个字符串,我想从单词的开头或结尾删除任何- ,( ,) ,& ,$ ,# ,! ,[ ,] ,{ ,} ," ,'。如果它在单词之间,请忽略那些。

这是一个例子:

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");

【问题讨论】:

  • “单词之间”是指单词内部吗?
  • 您的示例也删除了字符串中的标点符号,将您的标题编辑为“使用 js 从字符串中删除标点符号”或编辑示例。 jQuery 用于 DOM 操作,而不是用于数据操作
  • “Hello!^ there”和“Hello^!there”应该转换成什么还不是很清楚。我的解决方案会将前者转换为“Hello^ there”,而后者不受影响,而 Joseph Silber 的解决方案则相反(将后者转换为“Hello^ there”,而前者不受影响)。这完全取决于“一个词”对你来说是什么。

标签: javascript jquery regex


【解决方案1】:

您可以使用以下事实:正则表达式中的\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

【讨论】:

    【解决方案2】:

    这是我刚刚创建的一个。它可能会被简化,但它确实有效。

    "Hello I am a string, and I am called Jack-Tack!. My -mom is Darlean."
    .replace(/(?:[\(\)\-&$#!\[\]{}\"\',\.]+(?:\s|$)|(?:^|\s)[\(\)\-&$#!\[\]{}\"\',\.]+)/g, ' ')
    .trim();
    

    【讨论】:

      【解决方案3】:

      用一个空字符串替换这个正则表达式。

      /(?<=\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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多