正则表达式匹配字符串是什么,无论它在任意数量的不同索引上是否有1个或更少的撇号,或者根本没有?

时间:2013-11-01 16:07:49

标签: c# javascript jquery regex

我真的不太了解正则表达式语法,但我正在使用jQuery的简单突出显示插件,我需要它来选择一个单词是否在任意数量的不同索引处有1个或更少的撇号或完全没有。

例如,假设我有一个字符串:Tods(请注意,此字符串可以为任何东西)。

我需要一个仍然可以选择的正则表达式:Tod'sTo'dsT'ods'Tods。 (请注意,我没有在最后一个索引中包含撇号,因为这不是必需的,但是,可能不会伤害任何东西)。

到目前为止,我在jQuery中有这个代码......:

$("input.highlightTerm").each(function () {
    $(".resultValue").highlight($(this).val());
});

...其中$(this).val()是将突出显示的字符串。

我也可以在C#中执行此操作,因为我使用C#填充此jQuery代码在服务器端选取的隐藏输入字段($("input.highlightTerm"))。

简单的C#Razor语法:

for (var n = 0; n < searchTermsArray.Length; n++)
{
    <input class="highlightTerm" type="hidden" value="@searchTermsArray[n]" />
}

我需要完成这个的正则表达式语法是什么?

应该和不应该匹配的更多示例:

T'o'd's [应该匹配]

Tod's [应该匹配]

'Tods'[应该匹配]

'Tods OR Tods'[真的没关系,因为插件有效,但我应该匹配,是首选]

Tod'的[不应该匹配]

''Tods [不应该匹配]

- 如果字符串中任意数量的不同索引中有1个或更少的撇号,我几乎只想要匹配。

3 个答案:

答案 0 :(得分:2)

首先确保字符串具有长度并且没有双撇号(这排除了三元组和更高)。然后测试字符串是否只包含单词字符或撇号。

var re = /^[\w']*$/;
function checkForApostrophe(str) {
    if ( !str.length ) { return; }
    if ( str.indexOf("''") !== -1 ) { return; }
    if ( str.charAt(str.length-1) === "'" ) { return; }

    return re.test(str);
}

用[a-zA-Z]替换正则表达式中的'\ w',可能包括[0-9],具体取决于您的要求。

问题有点难以理解你想要什么,所以如果这不是很正确请发表评论。

答案 1 :(得分:2)

我认为在阅读了其他答案的评论之后,我已经弄明白你的目标是什么。您不需要可以为任何可能的输入执行此操作的单个正则表达式,您已经具有输入,并且您需要构建与其及其变体匹配的正则表达式。你需要做的就是这个。

var re = new RegExp("'?" + "tods".split("").join("'?") + "'?")

这将创建一个与您描述的方式匹配的正则表达式,只要它与原始字符串匹配即可。

在这种情况下,上面的行构建了这个正则表达式:

/'?t'?o'?d'?s'?/

这可能仍然不是100%正确。你知道,因为我没有自己的高亮功能可以玩,但我认为它应该让你走在正确的轨道上。

答案 2 :(得分:1)

我认为你必须做这样的事情!

 function checkForApostrophe(str) {
        var length = str.length;
        if (length != 0)
        {
            // Makes sure string contains only Alphabets, numbers and apostrophe : Nothing else
            if (str.matches("[a-zA-Z0-9']*")) {
                // makes sure there is only one or zero apostrophe
                if ((str.indexOf("'") != -1) && (str.indexOf("'") == str.lastIndexOf("'"))) {
                    // Makes sure there is no apostrophe stranded at the end 
                    if (str.lastIndexOf("'") == length - 1)
                        return false
                    else
                    return true;
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        }
    }