RegExp:如果前一个字符是大写字母,请不要拆分?

时间:2017-10-26 16:02:31

标签: javascript node.js regex

我目前正在使用以下正则表达式来分割文本:

  var separators = ['!', '.', ':', ';', '?'];
  var tokens = text.match(new RegExp("[^" + separators.join('') + "]+[" + separators.join('') + "]*", "g"));

我现在想要在.之后,只要点之前的字符是大写字母就不要分开(所以:如果它one. onE.如果它HttpClient clientHTTP = new HttpClient(); myModel model = new myModel(); model.Id = 100; model.data = "this is data"; var json = Newtonsoft.Json.JsonConvert.SerializeObject(model); clientHTTP.BaseAddress = new Uri("http://REMOTE_IP/"); clientHTTP.PostAsJsonAsync("/WebcastNotify/Heat", json) .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode()); 不分裂,那就分开public class WebcastNotifyController : Controller { public ActionResult Heat(myModel model) { // allways recieve model.Id = 0 and model.data = null } } { {1}}。有人能给我一个提示,告诉我如何做这样的事情并将其整合到我当前的代码中吗?

2 个答案:

答案 0 :(得分:3)

前提

您当前的RegExp模式是(忽略添加的空格): [^!.:;?]+ [!.:;?]*

给出一个输入样本,例如:the.quick;browN.fox.jumps 你最终得到了令牌:

  1. the.
  2. quick;
  3. browN.
  4. fox.
  5. jumps
  6. 并且您的目标是最终将标记3和4绑定在一起:browN.fox.

    1. the.
    2. quick;
    3. browN.fox.
    4. jumps
    5. 规则是如果分隔符是点(.)并且在它之前你有一个大写字母(在这个特殊情况下是字母N)你想让点失去它的作用作为分隔符和"绑定到文本的其余部分"。

      此外,此规则仅适用于点(.),而不适用于您列出的整个分隔符集(!.:;?)。

      的解决方案

      如果我理解的是正确的,那么你的回答是(再次忽略空白区域):

      ( [A-Z]\. | [^!.:;?] )+ [!.:;?]*

      这里发生的事情是,除了分隔符之外,不仅仅是"任何字符"至少在左侧一次,我们只需添加一个替代词,它由任何大写字母([A-Z])后跟一个点(.)组成,我必须逃脱。

      看看:https://regex101.com/r/25UQbq/1

      修改

      这是你在javascript中使用这个RegExp模式的方法:

      var input = "the.quick;browN.fox.jumps";
      var pattern = "([A-Z]\.|[^!.:;?])+[!.:;?]*";
      var options = "g"; // quite important
      var regexp = new RegExp(pattern, options);
      
      var output = input.match(regexp);
      // output should be ["the.", "quick;", "browN.fox.", "jumps"]
      

答案 1 :(得分:0)

一个想法:循环遍历字符串并替换每个.,而不是在带有不同分隔符的大写字母之后,例如!。然后从分隔符列表中删除.,并像之前一样进行拆分。