尝试在大内容中用双引号清除空白

时间:2018-07-26 14:00:03

标签: javascript jquery regex string conditional

我想清除一些文本:

不良内容:...“关注我的足迹” ...(“关注”前的空格)

好的内容:...“按照我的指导” ...

对于双引号中的每个内容,我想清除空格。 伟大的进步!

我的内容测试:

Le tour estjoué。 “每分钟进行一次自动进餐就可以了。Nous voulons ramener ce temps deàà20seconds”,Jan-Willem Dockheer解释,总督Générald'AH To Go,à百变的“。鉴定书,按阶段进行:检验是否有可能确认确凿的质量,并可能对玛格辛和手工艺三叉戟产品进行分类。

代码:

 app.use(express.session({ 
        secret: config.secret,
        resave: true,
        saveUninitialized: true,
        cookie: { secure: true }
     }));
app.use(passport.session()); 
var flag = 0;

$("#launchCleaner").click(function() {

  var loadOrigins =$('#txtorigines').val();
  //clean1 = loadOrigins.trim();
    clean1 = loadOrigins.replace(/" /g, '"');
    clean2 = clean1.replace(/ "/g, '"');
    clean3 = clean2.replace(/\./g, '. ');
  $("#txtclean").append(clean3);
});
textarea{
    width: 70%;
    float: left;
    margin: 0 1%;
    border-radius: 3px;
    height: 250px;
    resize:none
  }

3 个答案:

答案 0 :(得分:2)

问题是您没有跟踪自己在引号内还是引号外。在我看来,在这种情况下使用正则表达式只会使问题复杂化。

这就是我的方法:分割引号,并跟踪是否在引号之外(最初:是,然后切换),然后从那里构造新的字符串。

$("#launchCleaner").click(function() {
  var text = $('#txtorigines').val();
  var fragments = text.split('"');
  var newText = "";
  var outsideOfQuotes = true;
  for (var i = 0; i < fragments.length; i++) {
    if (outsideOfQuotes)
      newText += fragments[i];
    else
      newText += '"' + fragments[i].trim() + '"';
    outsideOfQuotes = !outsideOfQuotes;
  }
  $("#txtclean").append(newText);
});
textarea {
  width: 70%;
  float: left;
  margin: 0 1%;
  border-radius: 3px;
  height: 60px;
  resize: none
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="txtorigines">Text to " clean up " as an " example ", with some "good text" as well.</textarea>
<textarea id="txtclean"></textarea>
<button type="button" id="launchCleaner">Nettoyer le texte</button>

答案 1 :(得分:1)

如果您的报价是均衡的,并且没有任何转义的报价,那么您可以使用以下代码:

let re = /"\s+(?!(?:(?:[^"]*"){2})*[^"]*$)|\s+"(?=(?:(?:[^"]*"){2})*[^"]*$)/gm;
str = str.replcae(re, '"');

RegEx Demo

此正则表达式使用替代:

  • "\s+:匹配一个引号,后跟1+个空格(开头的引号)
  • (?!(?:(?:[^"]*"){2})*[^"]*$):先行断言我们前面的引号没有偶数
  • |:或
  • \s+":匹配1+空格,后接引号(结束引号)
  • (?=(?:(?:[^"]*"){2})*[^"]*$):先行断言我们前面的引号是偶数

答案 2 :(得分:0)

在与@anubhava相同的假设下

只需将"s*(.+?)\s*"替换为"\1"吗?