首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论字符串在任意数量的不同索引上有一个或更少的撇号,或者根本没有,正则表达式是什么?

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

Stack Overflow用户
提问于 2013-11-01 16:07:49
回答 3查看 346关注 0票数 2

我真的不太了解正则表达式语法,但是我使用了一个简单的jQuery高亮显示插件,我需要它来选择一个单词,不管它在任意数量的不同索引中有一个或更少的撇号,或者根本没有。

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

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

到目前为止,我在jQuery中有以下代码.:

代码语言:javascript
复制
$("input.highlightTerm").each(function () {
    $(".resultValue").highlight($(this).val());
});

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

我也可以在C#中这样做,因为我使用C#填充了jQuery代码在服务器端获取的隐藏输入字段($("input.highlightTerm"))。

简单的C# Razor语法:

代码语言:javascript
复制
for (var n = 0; n < searchTermsArray.Length; n++)
{
    <input class="highlightTerm" type="hidden" value="@searchTermsArray[n]" />
}

我需要什么正则表达式语法来完成这个任务?

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

泰奥德的应该匹配

托德应该匹配

“‘Tods”应该匹配

'Tods OR Tods‘并不重要,因为插件的工作方式,但我想应该匹配,是首选

托德不应该相配

‘托德不应该相配

--我只想在字符串中的任意数量的不同索引中有一个或更少的撇号时,才需要匹配。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-01 16:49:42

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

代码语言:javascript
复制
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);
}

将regex中的'\w‘替换为a,可能包括0-9 (取决于您的需求)。

这个问题有点难理解你到底想要什么,所以如果这不太正确,请评论。

票数 2
EN

Stack Overflow用户

发布于 2013-11-01 20:06:40

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

代码语言:javascript
复制
var re = new RegExp("'?" + "tods".split("").join("'?") + "'?")

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

在本例中,上面的行构建此正则表达式:

代码语言:javascript
复制
/'?t'?o'?d'?s'?/

这可能还不是百分之百正确。你知道,因为我周围没有突出的功能,但我认为它应该让你走上正确的轨道。

票数 2
EN

Stack Overflow用户

发布于 2013-11-01 16:41:22

我觉得你必须这样做!

代码语言:javascript
复制
 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;
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19730634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档