【问题标题】:Jquery Replace Remove Delete between two words with brackets [duplicate]Jquery用括号替换两个单词之间的删除删除[重复]
【发布时间】:2019-11-04 06:29:08
【问题描述】:

我正在尝试删除两个带括号的单词之间的所有内容。词是:{start}{end}

  (function ($) {
    $(document).ready(function(){

    $('.well.save').on('mouseleave touchend', function(){
        // alert('mouseleave touchend');
        var $editor = $(".markItUpEditor");
        var curValue = $editor.val();
        //alert(curValue);

        // check
        var confCheck = curValue.includes("{start}");
        //alert(confCheck);
        if (confCheck == true) {


          var myStr = $editor.val();
          var subStr = myStr.match("{start}(.*){end}");
          alert(subStr[1]);
          //$editor.val(curValue);

        }
    });
  })(jQuery);

上面的代码返回null。

我正在从文本区域获取内容。此文本区域有一个部分,其中包含在 mouseleave 上添加的文本。本节以单词{start} 开头并以单词{end} 结尾。现在我想删除这两个单词之间的所有内容以及这些单词,以便在下一次鼠标离开时我可以重新添加更新的信息。

Jquery 版本来自原生 Joomla 3。 textarea 包含以下内容:

There is some text in the message!


[confidential]
{start}

Site URL: 
Site Username: 
Site Password: 

FTP URL: 
FTP Username: 
FTP Password: 

Optional Information: 

{end}
[/confidential]```

【问题讨论】:

  • 1.请点击edit 2. 点击[<>] sn-p 编辑器 3. 将RELEVANT JS(字符串示例和正则表达式)添加到JS 窗格。您的问题中没有 jQuery 相关性
  • @mplungjan add RELEVANT JS (string examples and regex) 这是什么意思?你想要一个文本区域的例子吗?
  • 我想要一个输入字符串、reexes 和预期输出的示例。我已经编辑了你的问题,因为一旦你有了字符串,就没有与 jQuery 相关的东西,所以请删除它和标签以获得正确的答案
  • @mplungjan 请不要删除大部分可能与您无关但可能与其他人相关的问题。至于字符串,我可以举个例子。但我不知道 rexexes。
  • 但事实并非如此。如果您真的想要完整的 jQuery,您需要向我们提供 minimal reproducible example,其中包括您使用的 jQuery 版本和编辑器插件,以防它在将 {start} 和 {end} 传递给您的点击之前对其进行操作。跨度>

标签: javascript jquery


【解决方案1】:

一旦你有了字符串,代码如下 - 您的最终编辑提示我您有一个多行字符串。这是修复它的代码

https://regex101.com/r/4MYLO3/3

删除 - MULTILINE

var re = /{start}([\S\s]*?){end}/gm 

var str = $(".editor").val()
var newStr = str.replace(re,"");
console.log(newStr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<textarea class="editor" rows="10">There is some text in the message!
    [confidential]
    {start}
    
    Site URL: 
    Site Username: 
    Site Password: 
    
    FTP URL: 
    FTP Username: 
    FTP Password: 
    
    Optional Information: 
    {end}
    [/confidential]</textarea>

从中间复制

var re = /{start}([\S\s]*?){end}/gm 

var str = $(".editor").val()
var newStr = str.match(re);
console.log(newStr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<textarea class="editor" rows="10">There is some text in the message!
    [confidential]
    {start}
    
    Site URL: 
    Site Username: 
    Site Password: 
    
    FTP URL: 
    FTP Username: 
    FTP Password: 
    
    Optional Information: 
    {end}
    [/confidential]</textarea>

【讨论】:

  • 是的,如果插件是这样工作的,你当然可以
  • 是的。哦,非常感谢!
  • 当然。但也正如我所说。在您的问题中没有与 jQuery 相关的内容。这都是纯正则表达式。因此,下次尝试将其归结为实际问题。如果 jQUery 有效,则无需发布它
  • 你是对的!但我把这些东西放进去的主要原因是因为它可能对其他人有用。一种给予所有拼图的方式。虽然我忘记输入实际的文本区域内容是我的错。这是一个愚蠢且耗费时间的错误。所以再次感谢你和我在一起!
  • 好的 - 我稍后再看
【解决方案2】:

您的文本区域内容也可能包含新行,因此给定的正则表达式在我看来将不起作用。 将捕获 {start} 和 {end} 之间所有内容的正则表达式将是:

/{start}([\s\S]*){end}/gm

https://regex101.com/r/AystH8/1

要删除包括它们在内的两个关键字之间的所有内容,请使用以下内容:

//If your string is in the variable val;
val = "hi, my name is {start}\n \n gibberish and wrong \ncontent {end} prime hit!";
val = val.replace(/{start}([\s\S]*){end}/gm, "");
console.log(val); // output would be : hi, my name is prime hit!

我希望这能回答你的问题。

【讨论】:

  • 我不知道为什么,但我的输出是整个字符串?
  • 对不起,我的错! replace 函数返回一个新字符串并且不能修改该字符串,因为它们是不可变的。我们必须设置 val = val.replace (..) 。请参阅更新的答案。现在工作了吗@purple11111
  • 是的,它确实完美无缺。非常感谢您的回答!
  • 我希望我能接受两个答案。因为你的也值得接受。但是我不得不选择 mplungjan,因为他不仅回答了我的问题,而且还对我提出了一些关于 SO 问题的看法,而且他的代码更适合我的其他代码。但是,尽管如此,您的回答也是一个很好的工作解决方案。非常感谢!
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2016-04-16
  • 1970-01-01
  • 2011-04-14
  • 2014-07-20
相关资源
最近更新 更多