如何使用XRegexp匹配JavaScript中所有语言的文本、数字和白色空格字符

s8vozzvw  于 11个月前  发布在  Java
关注(0)|答案(3)|浏览(123)

内容:
我正在改进一个自定义令牌解析引擎,并希望支持字符,数字和空格字符在不同的语言。
目前,这与英语字符和数字一起使用以下正则表达式

var pattern = /\{\{someText\(?(\d+)?\|?([\w\d\s%]+)?\)?[\s\S]+\}\}/;

// this will extract the number and text in a token like
'{{someText(20|Hello World)}}'.match(pattern);

//output 
[20, 'Hello World']

字符串
但是上面的正则表达式无法解析其他语言中的字符:

'{{someText(20|abcdèfg)}}'.match(pattern);

//output 
[20, 'abcd']


我试过的正则表达式:
我尝试使用XRegexp和下面的正则表达式,但看起来它并不像我预期的那样工作。

var pattern = XRegExp(/\{\{customText\(?(\d+)?\|?([[\p{L}\p{N}_]\p{Nd}[\p{Z}\h\v]%]+)?\)?[\s\S]+\}\}/);

'{{someText(20|abcdèfg)}}'.match(pattern);

//output 
[20, undefined]


对于新的引擎,我希望也支持其他语言的字符。

'{{someText(20|abcdèfg)}}'.match(pattern);


会产生一个输出

[20, abcdèfg]


此标记的格式始终类似于{{someText(number|“实际文本”)}}

weylhg0b

weylhg0b1#

这将允许所有语言中的测试、数字和空格

XRegExp("^[\\p{L}\\d]+(?:\\s[\\p{L}\\d]+)?$");

字符串
之间的一个或多个空格

XRegExp("^[\\p{L}\\d]+(?:\\s+[\\p{L}\\d]+)*$");

qvk1mo1f

qvk1mo1f2#

你应该试试这个:

\{\{someText\(?(\d+)?\|?([^\n\r|]+)?\)?\}\}

字符串
如图所示,在**regex101.com**处

说明-

根据微软公司
如果指定了符合ECMAScript的行为,则\w等效于[a-zA-Z_0-9]
因此,\w自然会匹配任何英文字符,而不是带重音的字符。
一个很好的解决方法是使用[^\n\r|]而不是[\w\d\s%],这样它就可以匹配所有字符,除了换行符和管道|符号(原因很明显)。
另外,出于某种原因,你还包含了一个[\s\S]+,它基本上可以匹配所有空格和非空格字符(即所有存在的字符)。我删除了它,这样你就可以匹配多次出现的模式,即使是在新的行上:)

9njqaruj

9njqaruj3#

由于您并不真正关心字符串的内容,因此只需使用

// non-newline
/\{\{someText\((\d+)\|(.*?)\)\}\}/
// or any character at all
/\{\{someText\((\d+)\|([^]*?)\)\}\}/
// or not brackets
/\{\{someText\((\d+)\|([^)}]*?)\)\}\}/

字符串

相关问题