2

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

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

我需要一个仍然可以选择的正则表达式:Tod's、、、或。(请注意,我没有在最后一个索引处包含撇号,因为这不是必需的,尽管它可能不会造成任何伤害)。To'dsT'ods'Tods

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

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

...$(this).val()将突出显示的字符串在哪里。

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

简单的 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's [不应该匹配]

''Tods [不应该匹配]

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

4

3 回答 3

2

我认为在阅读了其他答案的评论后,我已经弄清楚了您的目的。您不需要一个可以为任何可能的输入执行此操作的正则表达式,您已经输入,并且您需要构建一个匹配它及其变体的正则表达式。你需要做的是这个。

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

这将创建一个与您描述的方式匹配的正则表达式,前提是它与原始字符串匹配。

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

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

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

于 2013-11-01T20:06:40.747 回答
2

First make sure the string has length and that there are no double-apostrophes (this rules out triples and higher as well). Then test the string for containing only word characters or apostrophes.

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);
}

Replace '\w' in the regex with [a-zA-Z], possibly including [0-9] depending on your requirements.

The question is a little difficult to understand exactly what you want, so if this isn't quite right please comment.

于 2013-11-01T16:49:42.880 回答
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;
            }
        }
    }
于 2013-11-01T16:41:22.173 回答