javascript - 正则表达式,指定循环次数

标签 javascript regex

此正则表达式查找包含 3 个或更少字符的单词,以便可以在它们之前放置一个不间断的空格。

smallwords = /(\s|^)(([a-zA-Z-_(]{1,2}('|’)*[a-zA-Z-_,;]{0,1}?\s)+)/gi, // words with 3 or less characters

有没有办法让表达式只适用于连续的 2 个单词?

示例

目前,字符串:

Singapore, the USA and Vietnam.

将变成:

Singapore, the USA and Vietnam.

如果表达式仅应用于连续 2 个单词,则会显示

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;

            }
    }
};

这是来自 RagAdjust

最佳答案

我知道这不是您所要求的,但我认为代码审查不会有什么坏处:

  • 我认为在这种情况下,单词边界 \b\s|^ 更好。
  • 您的匹配项中有 A-Za-z 字符,但您使用的是 i 不区分大小写的运算符。
  • {0,1}? 是多余的 - 可以使用 ? 将其设为可选,或使用 {0,1} 将其设为可选使其匹配零次或一次。
  • 如果您的字符集中需要有破折号,请将其放在末尾,这样就不会出现不明确的正则表达式,例如这个 [a-z_-] 会更好比[a-z-_]
  • 如果不需要捕获值,请使用非捕获括号(?:)

所以,这是清理后的正则表达式:

/\b((?:[a-z_(-]{1,2}(?:'|')*[a-z_,;-]?\s)+)/gi

我很确定当您从编辑器粘贴此内容时,'|' 位是某种拼写错误。不确定它应该是什么。

关于javascript - 正则表达式,指定循环次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249498/

相关文章:

javascript - 如何获取跨度的行高?

Python:正则表达式搜索

java - 正则表达式适用于除前面没有字符串的特定字符之外的所有内容

javascript - 云 Firestore : Update fields in nested objects with dynamic key

javascript - 关于更改元素 InnerHTML 的基本 Javascript 查询

javascript - 如何使用 JavaScript 获取 ListBox 中每个 ListItem 的值

javascript - 我正在使用 html2pdf 生成 pdf,我可以隐藏 html 以便用户看不到它吗?

python 正则表达式 破折号

javascript - 删除任何非数字并检查是否格式化为有效数字

php - 正则表达式从字符串中提取多个base64编码图像