其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

字符串模式后字符串的正则表达式

GG网络技术分享 2025-03-18 16:15 2


问题描述:

I have a string like this (4 words separated by dot)

Exactfoobar.foobar-_nocaps.foobar-_nocaps.foobar-_caps

I need to write a regex to find the pattern as above.

  1. There could be 4 or more fields separated by a dot
  2. The first word should be exactly Exactfoobar.
  3. The 2nd and 3rd word can\'t have caps but can have -_
  4. The 4th word and so on can have caps with -_

I was thinking of using groups but its not working here:

^Exactfoobar\\.([a-z0-9][a-z0-9_\\-.])+([a-z0-9][a-zA-Z0-9_\\-.])+$

How should I think about matching a string after another string. Is it possible?

Trying this in golang but cant seem to get the above regex right

package main

import (

\"fmt\"

\"regexp\"

)

func main() {

var validID = regexp.MustCompile(`^ Exactfoobar\\.([a-z0-9][a-z0-9_\\-.])+([a-z0-9][a-z0-9_\\-.])+$`)

fmt.Println(validID.MatchString(\"Exactfoobar.somestring.some_other-string.someStringwithCaps\"))

}

Result:

false

Thanks

图片转代码服务由CSDN问答提供

感谢您的意见,我们尽快改进~

功能建议

我有一个这样的字符串(由点分隔的4个单词)</ p>

   Exactfoobar.foobar-_nocaps.foobar-_nocaps.foobar-_caps 

</ code> </ pre>

我需要编写一个正则表达式来找到上述模式。 </ p>

  1. 可能有4个或更多由点分隔的字段</ li>

  2. 第一个单词应该完全是 Exactfoobar。</ code > </ li>

  3. 第2个和第3个单词不能带大写,但可以带有-_ </ li>

  4. 第4个单词等可以带-_ </ li>

    </ ol>

    我正在考虑使用组,但在这里不起作用:</ p>

      ^ Exactfoobar \\。([a-z0-9  ] [A-Z0-9 _ \\  - ])+([A-Z0-9] [A-ZA-Z0-9 _ \\  - ])+ $ 

    </代码> </ PRE>

    我应该如何考虑将一个字符串接另一个字符串匹配。 </ p>

    可以在golang中尝试此操作,但似乎无法正确获取上述正则表达式</ p>

     包main 

    import(\\ n“ fmt”

    “ regexp”

    func main(){

    var validID = regexp.MustCompile(`^ Exactfoobar \\。([[a-z0-9] [a-z0-9_ \\-。])+([[a-z0-9] [a-z0-9 _ \\-。])+ $`)

    fmt.Println(validID.MatchString(“ Exactfoobar.somestring.some_other-string。 someStringwithCaps“))

    }

    </代码> </ PRE>

    结果:</ p>

     <代码>假

    < / code> </ pre>

    谢谢</ p>

    </ div>

    网友观点:

    You may use

    ^Exactfoobar(?:\\.[a-z0-9][a-z0-9_-]*){2}(?:\\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+$

    See the regex demo

    • ^ - Start of string
    • Exactfoobar - some word
    • (?:\\.[a-z0-9][a-z0-9_-]*){2} - two repetitions of a ., then a lowercase letter or digit and then 0+ lowercase letters or digits, _ or -
    • (?:\\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+ - 1 or more repetitions of

      • \\. - dot
      • [a-zA-Z0-9] - a letter or digit
      • [a-zA-Z0-9_-]* - 0+ letters, digits or _ or -
    • $ - end of string.

    ^Exactfoobar(?:\\.[a-z0-9_\\-]+){2}(?:\\.[A-Za-z0-9_\\-]+)+$

    https://regex101.com/r/PJ9V0L/1

    正则表达式与模板字符串

    正则:模板字符串要符合的正确规则。

    模板引擎(封装的telamplace函数):data数据,模板,正则,replace替换占位符内容为data中的真值。

    es6语法糖(模板字符串)JS中模板字符串的使⽤

    在ES6之前,我们都使⽤单引号或者双引号来包裹字符串,当我们想要在字符串中加⼊变量时,不能直接写在字符串⾥,⽽是需要通过字符串拼接的⽅式来往字符串中加⼊变量

    var num = 123;

    var str = '你好num';

    var str1 = '你好' + num;

    console.log(str);

    console.log(str1);

    从上⾯的代码以及运⾏结果我们可以发现想要在字符串中添加变量就需要⽤到字符串拼接,当需要拼接的变量数量较多时可能会⽐较⿇烦。

    ES6中引⼊了⼀种新的字符串的创建⽅式,使⽤反引号(``)来包括字符串,也称之为模板字符串,在模板字符串中添加变量不需要再使⽤字符串拼接,只需要在变量前加$符号,再⽤{}包裹变量即可

    var num = 123;

    var str2 = `你好${num}`;

    console.log(str2);


    以上就是对于模板字符串的简单描述

    概念:模板字符串使⽤反引号 (` `) 来代替普通字符串中的⽤双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符。占位概念:

    符中的表达式和周围的⽂本会⼀起传递给⼀个默认函数,该函数负责将所有的部分连接起来,如果⼀个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是⼀个函数,它会在模板字符串处理后被调⽤,在输出最终结果前,你都可以通过该函数来对模板字符串进⾏操作处理。在模版字符串内使⽤反引号(`)时,需要在它前⾯加转义符(\\)。

    基本⽤法:ES6中允许使⽤反引号 ` 来创建字符串,此种⽅法创建的字符串⾥⾯可以包含由美元符号加花括号包裹的变量${vraible}。

    基本⽤法

    1、模板字符串是对常规JavaScript字符串的重⼤改进,不同于在普通字符串中使⽤单引号或者双引号,模板字符串的声明需要使⽤反撇号。

    因为使⽤的是反撇号,故可以在模板字符串中随意使⽤单双引号了,使⽤时不再需要考虑转义。

    2、模板字符串默认⽀持多⾏:

    在新⾏中插⼊的任何字符都是模板字符串中的⼀部分,使⽤普通字符串,可以通过以下的⽅式获得多⾏字符串:

    同样的效果使⽤模板字符串后


    3、在${}中插⼊js表达式。当解析到表达式时,表达式会被执⾏,该处将渲染表达式的值:

    a、 如插⼊⽇期、数学运算等,测试如下

    b、由于模板字符串本⾝也是JavaScript表达式,我们在模板字符串中还可以嵌套模板字符串4、模板字符串简洁⾼效的返回基于html和数据⽣成的字符串:测试如



    空格得以保留,多个li也按我们的预期被合适的渲染:

    5、标记模板

    更⾼级的形式的模板字符串是带标签的模板字符串。标签使可以⽤函数解析模板字符串。标签函数的第⼀个参数包含⼀个字符串值的数组。其余的参数与表达式相关。最后,标签函数可以返回处理好的的字符串(或者它可以返回完全不同的东西 , 如下个例⼦所述)。⽤于该标签的函数的名称可以被命名为任何名字。

    测试如下


    测试中 标记函数的第⼀个参数是包含字符串值的数组,这⾥的数组是['that','is a'] ,数组的值是经模板字符串中的${}分

    隔的‘that’和‘is a’。后续参数分别和模板字符串中的${}相对应。

    拓展:默认情况下,JavaScript会把\\解析为转义符号,对浏览器来说,以\\开头的字符⼀般具有特殊的含义。⽐如说\\n意味着新⾏,\\u00f1表⽰ñ等等。如果你不想浏览器执⾏这种特殊解析,可以使⽤String.raw来标记模板。

    在标记函数的第⼀个参数中,存在⼀个特殊的属性raw ,我们可以通过它来访问模板字符串的原始字符串,⽽不经过特殊字符的替换。

    另外,使⽤String.raw() ⽅法创建原始字符串和使⽤默认模板函数和字符串连接创建是⼀样的。

    测试如下:

    这⾥添加string.raw后,浏览器没有把 "\\n"当成


    ⾏字符。

    缺点:

    1、模板字符串不会⾃动转义特殊字符,(但是我们可以通过标签模板来解决这个问题)所以为了防⽌跨脚本攻击,我们还是要⼩⼼处理⼀些敏感数据;

    测试如下:

    js部分含有\\n 特殊符号 换⾏

    浏览器渲染后 发现并没有将\\n转义成换⾏

    2、 它不是⽤来取代其他js模板的,部分原因在于模板字符串不⽀持循环和条件语句,⽽这些是其他js模板擅长的。






标签:

提交需求或反馈

Demand feedback