使用正则表达式识别和隔离希伯来语单词

Jon*_*aid 5 javascript regex hebrew right-to-left

我需要解析一个希伯来语句子来识别和隔离(这样我就可以用“span”标签将它们包裹起来)其中的每个单词。\n我首先尝试通过从空格字符中识别非空格字符来不使用标点符号,但仍然不起作用:

\n\n
var regex = /(\\s)*(\\S)+(\\s)*/g;\n
Run Code Online (Sandbox Code Playgroud)\n\n

有什么想法吗?\n谢谢

\n\n

编辑:我已经有一个用英语完成工作的正则表达式,我把它放在以防万一它可以帮助理解我想要实现的目标:

\n\n
var regExp = /\\b([^\\s\']+)\\b/g,\n
Run Code Online (Sandbox Code Playgroud)\n\n

edit2:添加代码示例

\n\n
var regex = /(\\s)*(\\S)+(\\s)*/g;\nvar sentence = "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d \xd7\x9e\xd7\x94 \xd7\xa7\xd7\x95\xd7\xa8\xd7\x94 \xd7\x9e\xd7\x94\xd7\x99\xd7\x95\xd7\x9d";\nsentence.replace(regex, function(match, p1, p2, p3){console.log(\'"\' + match + \'"\', \'"\' + p1 + \'"\', \'"\' + p2 + \'"\', \'"\' + p3 + \'"\');});\n\n\n// result\n"\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d " "undefined" "\xd7\x9d" " " VM1494:2\n"\xd7\x9e\xd7\x94 " "undefined" "\xd7\x94" " " VM1494:2\n"\xd7\xa7\xd7\x95\xd7\xa8\xd7\x94 " "undefined" "\xd7\x94" " " VM1494:2\n"\xd7\x94\xd7\x99\xd7\x95\xd7\x9d" "undefined" "\xd7\x9d" "undefined" VM1494:2\n"undefinedundefinedundefinedundefined"\n
Run Code Online (Sandbox Code Playgroud)\n\n

edit3:我需要能够在末尾使用相同的标点符号重新组合句子。

\n

Lio*_*ior 1

好吧,你可能知道网络上的希伯来语是个混蛋。\n尝试使用这个正则表达式:

\n\n
[\\s]*(\\S)+[\\s]*\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子:

\n\n
var words = sentence.match(/[\\s]*(\\S)+[\\s]*/g);\n
Run Code Online (Sandbox Code Playgroud)\n\n

它确实会留下尾随空格来清除它们,您可以执行以下操作:

\n\n
words = words.join().split(" ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试一些其他正则表达式变体来尝试规避连接分割黑客,如果我发现任何东西,我会更新。

\n\n

另外,您可以采用“替换”方式并执行以下操作:

\n\n
var words = sentence.replace(/[#`~?!#\\$%\\.;:,]*/g, "").split(" ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

只需确保添加可能使用的标点符号即可。

\n\n

然后,要获取一个新的 HTML 字符串,其中包含用 span 标签包裹的单词,您可以执行以下操作:

\n\n

这么说吧:

\n\n
var sentence = "?\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d, \xd7\x9e\xd7\x94 \xd7\xa7\xd7\x95\xd7\xa8\xd7\x94 \xd7\x9e\xd7\x94\xd7\x99\xd7\x95\xd7\x9d"\nvar words = sentence.replace(/[#`~?!#\\$%\\.;:,]*/g, "").split(" ")\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后:

\n\n
var newSentence = encodeURI(sentence)\nwords.forEach(function(word){\n   word = encodeURI(word)\n   newSentence = newSentence.replace(word, "<span>" + word + "</span>")\n})\nnewSentence = decodeURI(newSentence);\n
Run Code Online (Sandbox Code Playgroud)\n\n

newSentence会将您的单词用 span 标签包裹起来,同时保留标点符号:

\n