Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp:如果前一个字符是大写的,是否不拆分?_Javascript_Node.js_Regex - Fatal编程技术网

Javascript RegExp:如果前一个字符是大写的,是否不拆分?

Javascript RegExp:如果前一个字符是大写的,是否不拆分?,javascript,node.js,regex,Javascript,Node.js,Regex,我目前正在使用以下正则表达式拆分文本: var separators = ['!', '.', ':', ';', '?']; var tokens = text.match(new RegExp("[^" + separators.join('') + "]+[" + separators.join('') + "]*", "g")); 现在,我不想在点前面的字符使用大写字母时在后拆分(所以:如果是一,就拆分。如果是一,就不要拆分。。有人能给我一个提示,告诉我如何做这样的事情并将其集

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

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

现在,我不想在点前面的字符使用大写字母时在
后拆分(所以:如果是
一,就拆分。
如果是
一,就不要拆分。
。有人能给我一个提示,告诉我如何做这样的事情并将其集成到当前代码中吗?

一个想法:循环字符串,并用不同的分隔符替换每个不在大写字母后面的
,说
。然后删除ode>从分隔符列表中删除,然后像以前一样拆分。

一个想法是:循环字符串并将每个不在大写字母后面的
替换为不同的分隔符,比如说
。然后从分隔符列表中删除
,然后像以前一样拆分。

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

给出一个输入示例,比如:
the.quick;browN.fox.jumps
你最终会得到代币:

  • quick;
  • browN.
  • fox.
  • 跳转
  • 您的目标是将令牌3和4绑定在一起:
    browN.fox.

  • quick;
  • browN.fox.
  • 跳转
  • 规则是,如果分隔符是点(
    ),并且在它前面有一个大写字母(在这个特殊情况下是字母
    N
    ),则希望点失去分隔符的作用,并“绑定到文本的其余部分”

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

    解决方案

    如果我的理解是正确的,那么您的答案是(再次忽略空白):

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

    这里发生的事情是,我们没有在左手边至少添加一次“除分隔符以外的任何字符”,而是添加了一个替代字符,它由任何大写字母(
    [a-Z]
    )和一个我必须转义的点(
    )组成

    看看:

    编辑

    以下是如何在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"]
    
    前提

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

    给出一个输入示例,比如:
    the.quick;browN.fox.jumps
    你最终会得到代币:

  • quick;
  • browN.
  • fox.
  • 跳转
  • 您的目标是将令牌3和4绑定在一起:
    browN.fox.

  • quick;
  • browN.fox.
  • 跳转
  • 规则是,如果分隔符是点(
    ),并且在它前面有一个大写字母(在这个特殊情况下是字母
    N
    ),则希望点失去分隔符的作用,并“绑定到文本的其余部分”

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

    解决方案

    如果我的理解是正确的,那么您的答案是(再次忽略空白):

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

    这里发生的事情是,我们没有在左手边至少添加一次“除分隔符以外的任何字符”,而是添加了一个替代字符,它由任何大写字母(
    [a-Z]
    )和一个我必须转义的点(
    )组成

    看看:

    编辑

    以下是如何在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"]
    

    非常感谢。这太完美了!@geogenewer查看我最新编辑的中的示例代码javascript@GeorgeWelder您没有确认您的新规则只涉及点(
    ),没有其他分隔符。如果不是这样,您可以始终将
    [A-Z]\.
    转换为
    [A-Z][。]
    (我们刚刚将点作为一个集合的单个成员)然后您可以将该集合放大或缩小到任意大小,例如:
    [a-Z][.;!]
    etcThanks很多。这太完美了!@geogenewer查看我最新编辑的示例代码javascript@GeorgeWelder您没有确认您的新规则仅涉及dot(
    )如果不是这样的话,你可以把
    [A-Z]\.
    转换成
    [A-Z][.]
    (我们刚刚把点作为一个集合的单个成员),然后你可以将该集合放大或缩小到你喜欢的任何位置,例如:
    [A-Z][.;!]
    等等