Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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 正则表达式,指定多个循环_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式,指定多个循环

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

此正则表达式查找包含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 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/, '&#160;');
    });
  }
 return c;
})

代码笔


此外,要想看到区别,您需要检查元素,以实际查看NBSP的最终位置,这一点您可能已经知道了。

您使用的是javascript,对吗?将这个RegExp传递给replace函数?我刚刚在扩展脚本中添加了。谢谢你的提示。