Javascript 正则表达式,指定多个循环
此正则表达式查找包含3个或更少字符的单词,以便在其前面放置不间断的空格Javascript 正则表达式,指定多个循环,javascript,regex,Javascript,Regex,此正则表达式查找包含3个或更少字符的单词,以便在其前面放置不间断的空格 smallwords = /(\s|^)(([a-zA-Z-_(]{1,2}('|’)*[a-zA-Z-_,;]{0,1}?\s)+)/gi, // words with 3 or less characters 有没有一种方法可以使表达式只适用于一行中的两个单词 实例 当前,字符串: Singapore, the USA and Vietnam. 将变成: Singapore, the&nbs
smallwords = /(\s|^)(([a-zA-Z-_(]{1,2}('|’)*[a-zA-Z-_,;]{0,1}?\s)+)/gi, // words with 3 or less characters
有没有一种方法可以使表达式只适用于一行中的两个单词
实例
当前,字符串:
Singapore, the USA and Vietnam.
将变成:
Singapore, the USA and Vietnam.
如果表达式仅应用于一行中的两个单词,则会显示
Singapore, the USA and Vietnam.
以下是完整的脚本:
ragadjust = function (s, method) {
if (document.querySelectorAll) {
var eles = document.querySelectorAll(s),
elescount = eles.length,
smallwords = /(\s|^)(([a-zA-Z-_(]{1,2}('|’)*[a-zA-Z-_,;]{0,1}?\s)+)/gi, // words with 3 or less characters
while (elescount-- > 0) {
var ele = eles[elescount],
elehtml = ele.innerHTML;
if (method == 'small-words' || method == 'all')
// replace small words
elehtml = elehtml.replace(smallwords, function(contents, p1, p2) {
return p1 + p2.replace(/\s/g, ' ');
});
ele.innerHTML = elehtml;
}
}
};
这是来自我知道这不是您想要的,但我认为代码检查不会有什么坏处: 在本例中,我认为单词boundary\b比\s| ^更好。 匹配中有A-Z和A-Z字符,但使用i不区分大小写运算符。 {0,1}? 是否冗余-是否使用?使其成为可选的,或使用{0,1}使其匹配零次或一次。 如果您的角色集中要有一个破折号,请将其放在末尾,这样您就不会有不明确的正则表达式,例如,这个[a-z_-]比[a-z_-]好得多。 如果不需要捕获值,请使用非捕获括号?:。 这是你清理过的正则表达式: /\b?:[a-z_-]{1,2}?:'|'*[a-z_-]?\s+/gi
我敢肯定,当您从编辑器中粘贴此内容时,“|”位是某种类型的输入错误。不确定它应该是什么。这并不能像您建议的那样完全解决问题,但它确实减少了字符串中的非中断空格数。但它可能会给你一些洞察力。因为在两个正则表达式替换中都有尾随的g,所以要进行全局替换。如果你改为循环使用一些最大数量的修复程序,事情的结果会有点不同 尝试更改替换的最大数量。我认为在我修改过的代码中发生的另一件事是,在你做了一次替换之后,空格和小字都消失了,因为你被一个可能解决问题,也可能解决不了问题的nbsp卡住了 这是我的替换函数,它是从你原来的函数简化而来的。基本模式是从正则表达式中删除g并添加循环。您应该查看代码笔以查看完整的交易
var new_ragadjust = function (contents) {
MAX_NUMBER_OF_REPLACEMENTS = 5;
smallwords = /(\s|^)(([a-zA-Z-_(]{1,2}('|’)*[a-zA-Z-_,;]{0,1}?\s)+)/i; // words with 3 or less characters
var ii = 0;
var c = contents;
for (;ii < MAX_NUMBER_OF_REPLACEMENTS; ++ii) {
c = c.replace(smallwords, function(contents, p1, p2) {
return p1 + p2.replace(/\s/, ' ');
});
}
return c;
})
代码笔
此外,要想看到区别,您需要检查元素,以实际查看NBSP的最终位置,这一点您可能已经知道了。您使用的是javascript,对吗?将这个RegExp传递给replace函数?我刚刚在扩展脚本中添加了。谢谢你的提示。