【问题标题】:Replace string if the string is not part of a larger string using regex in javascript如果字符串不是较大字符串的一部分,则在 javascript 中使用正则表达式替换字符串
【发布时间】:2015-09-05 00:24:11
【问题描述】:

我正在尝试编写一个函数,它将textarea 中的某些单词大写,但我遇到了麻烦,因为这些单词可能是其他单词的一部分,我只想在它们单独站立时将它们大写。

例如:我想将 OR 大写,但前提是不要使用像 befORe 这样的单词。然而,这些词可以以多种方式书写,例如在一行的开头、一个或多个 whitespace 字符之间或类似这样的方式:(somethingsomething)OR(somethingelse) 甚至可能更多,这取决于其他人的书写方式查询代码。

我有与regex 合作的想法,但我不够熟练,无法计算出写这些词的所有可能性。

我无法将 textarea 更改为其他更好的插件或编辑器,因为它已经是正常运行脚本的一部分。

任何有用的想法将不胜感激。

编辑:另外一个问题

我的问题得到了非常有用的答案,谢谢大家。不过,我还有一个额外的问题。如果,除了检查它不是单词的一部分之外,我还想检查它是否前面或后面没有 . 句点。我尝试在它的开头添加(?!\.),但这根本不起作用。有没有办法检查呢?

//编辑:没关系,我想通了。它是 \b(?!\.)something(?!\.)\b 用于检查单词的开头和结尾。

【问题讨论】:

    标签: javascript php regex string replace


    【解决方案1】:

    在单词边界上匹配\b 可能适合:

    'foo or bar'.replace(/\bor\b/, 'OR'); // foo OR bar
    

    你也可以提供一个函数来替换,所以:

    'foo or bar'.replace(/\b(or)\b/, function(m){return m.toUpperCase()})); // foo OR bar
    

    这可能适用于您有多个可能匹配的情况:

    'foo or bar and fum'.replace(/\b(or|and)\b/ig, function(m){return m.toUpperCase()}); // foo OR bar AND fum
    

    【讨论】:

      【解决方案2】:

      这样的? (°_•)

      var txt="or some text or before (.)or(.) anywhere Or";
      
      console.log(txt.replace(/\bor\b/gi,"OR"));     
      
      // "OR some text OR before (.)OR(.) anywhere OR"
      

      【讨论】:

      • 我会试试这个,但是当我这样做的时候,我可以要求澄清一下\b 是什么吗?或者一般来说这条线本身是做什么的?
      【解决方案3】:

      类似这样的:

      '(something)or(somethingelse) before or oR Or OR oreos thor'.replace([^\w]([oO][rR])[^\w], 'OR');
      

      【讨论】:

        猜你喜欢
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2012-04-26
        相关资源
        最近更新 更多