选择是否没有分隔符,如果没有则选择

时间:2016-03-28 11:47:36

标签: regex string

我的字符串类似"smth 2sg. smth",有时候"smth 2sg.| smth."

如果字符串不包含"2sg.",我应该使用哪个掩码来选择"|",如果字符串包含"|"则不选择任何内容?

4 个答案:

答案 0 :(得分:1)

这样的事可能适合你:

(\d*sg\.)(?!\|)

它假设有(或没有)数字后跟sg.而后跟|

答案 1 :(得分:1)

我有两种方法。他们都使用了一种叫做否定前瞻的东西,就像这样使用:

var arrayOfJSON = ...
var arrayOfObjects = arrayOfJSON.map(function (jsonString){
    return JSON.parse(jsonString)
})
var jsonStringWithAllObjects = JSON.stringify(arrayOfObjects)

如果将其插入RegEx,则表示如果存在(?!data) ,则RegEx将不匹配。

可以找到关于否定前瞻的更多信息here

方法1(更短)

抓住data

试试这个RegEx:

2sg.

如果号码长度超过1位,请使用(\dsg\.)(?!\|)

Live Demo on RegExr

工作原理:

(\d+...

方法2(更长但更安全)

匹配整个字符串并捕获( # To capture (2sg.) \d # Digit (2) sg # (sg) \. # . (Dot) ) (?!\|) # Do not match if contains |

试试这个RegEx:

2sg.

如果号码长度超过1位,请使用^\w+\s*(\dsg\.)(?!\|)\s*\w+\.?$

Live Demo on RegExr

工作原理:

(\d+sg...

答案 2 :(得分:0)

^.*(\dsg\.)[^\|]*$

说明:

^  : starts from the beginning of the string
.* : accepts any number of initial characters (even nothing)
(\dsg\.) : looks for the group of digit + "sg." 
[^\|]*  : considers any number of following characters except for | 
$ : stops at the end of the string

您现在可以通过从正则表达式中获取第一个组来选择字符串

答案 3 :(得分:0)

尝试:

(\d+sg.(?!\|))

取决于您的编程环境,它可能会有所不同,但会得到您的结果。

有关详细信息,请参阅Negative Lookahead