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"));
现在,我不想在点前面的字符使用大写字母时在
后拆分(所以:如果是一,就拆分。
如果是一,就不要拆分。
。有人能给我一个提示,告诉我如何做这样的事情并将其集成到当前代码中吗?一个想法:循环字符串,并用不同的分隔符替换每个不在大写字母后面的
,说!
。然后删除
替换为不同的分隔符,比如说!
。然后从分隔符列表中删除
,然后像以前一样拆分。
您当前的RegExp模式是(忽略添加的空白):
[^!:;?]+[!:;?]*
给出一个输入示例,比如:the.quick;browN.fox.jumps
你最终会得到代币:
quick;
browN.
fox.
跳转
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.
跳转
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][.;!]
等等